C++ 函数返回数组指针的问题

提醒一下:
int *func()
{
int a[10] = {5};
return a;
}
是非法的,因为 a 是局部变量,被申请在系统栈中,局部变量在函数返回后会被销毁,于是你返回的指针指向的是一段已经被系统回收的内存,这样的访问是非法的。
int *func()
{
int *a = new int[10];
a[0] = 5;
return a;
}
是合法的,通过new运算符申请的一段内存是在系统堆上的,其销毁不受系统控制,而由程序员控制,所以如果在外部有int *ret = func(),将 ret 使用完毕后需及时 delete ret;,否则可能造成内存泄露。

时间: 2025-02-01 01:01:29

C++ 函数返回数组指针的问题的相关文章

声明返回数组指针的函数

时间:2014.05.18 地点:基地 ------------------------------------------------------------------------ 一.基本知识 常识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. typedet int arr[10]; //arr是类型别名,表示的类型含有10个整数的数组 上述语句等效于 using arr=int[10] 在来复习几个基础知识 int arr[10]; //arr是一个含有10个整数的数

C++ —— 返回数组指针的函数

基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用  和 返回一个含有10个整型元素的数组的指针 的函数为例. 法一:(不使用别名) int (*getCopyArr(int (&arr)[10]))[10] { int (*n)[10] = (int (*)[10])new int[10]; for (int i = 0; i < 10; i++) (*n)[i] = arr[i

返回类型和return语句:无返回值函数,有返回值函数,返回数组指针

重点: 1.return语句功能:终止当前正在执行的函数并将控制权返回到调用该函数的地方.Return语句两种形式: Return: Return expression; 2.返回void的函数不要求非得有return语句,因为在这类函数的最后一句后面会隐式地执行return. 3.Void函数如果想中间退出,可以使用return,作用相当于break,提前退出. 4.一个返回类型是void的函数也可以使用return expression形式,不过return语句的expression必须是另

数组、指针数组、数组指针、返回数组指针的函数的关系

直接上代码吧,解释说得很清楚了. // C++Primer.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> using namespace std; int (*function(int i))[10];//返回数组指针的函数 int main() { cout<<"数组.指针数组.数组指针.返回数组指针的函数:"<<endl<<endl; in

返回数组指针

如果我们想定义一个返回数组指针的函数,则数组的维度必须跟在函数的名字之后,然而函数名字之后的是形参列表,所以形参列表应该在数组的维度之前.返回数组指针的函数形式如下所示: Type (*function (parameter_list)) [dimension] 下面这个func函数的声明没有使用类型别名: int (*func (int i))[10]; C++ 11 中可以使用尾置返回类型 auto func(int i) -> int(*)[10]; 使用decltype 如果我们知道函数

shell 函数 返回数组

shell 函数 返回数组,布布扣,bubuko.com

函数返回局部指针变量是否可行?

我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量.为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段.只读数据段.已初始化的读写数据段.未初始化的数据段.堆.栈. 1.代码段.只读数据段.已初始化的读写数据段.未初始化的数据段都属于静态区域

C语言中函数返回数组

#include "stdio.h"/*int* set(int a,int *c){ int *b; b=malloc(sizeof(int)*3); c[0]=a; c[1]=1+a; c[2]=2+a; b[0]=13; b[1]=14; b[2]=15; return b;}*/char *set(void){ char *buf; buf=malloc(sizeof(char)*3);//创建内存区 buf[0]=0x30; buf[1]=0x31; buf[2]=0x32;

通过函数返回数组

C语言中,一个函数是不能直接返回一个集合类型的,但是我们可以返回一个数组地址,需要注意的是C语言不能返回局部变量(local variable)的地址,所以我们要在函数中将其定义为静态变量(static variable). #include<stdio.h> int *get_arr(); int main() { int *arr = get_arr(); int i = 0; for(; i<3; i++) { printf("%d\t", *(arr+i));