C++返回数组时要注意的地方

转载:https://my.oschina.net/superpdm/blog/183134=

看以下代码:

#include <stdio.h>
using namespace std;
int* f()
{
	int ch[2];
	ch[0]=0;
	return ch;
}
void f1()
{
	int ch[2];
	ch[0]=1;
}
void f2()
{
	double a=10.288;
}
int main()
{
	int* aa=f();
	cout<<aa[0]<<endl;
	f1();
	cout<<aa[0]<<endl;
	f2();
	cout<<aa[0]<<endl;

	getchar();
}



输出结果: 
0

-13377

数组ch的首地址指针是指向栈上面的一段内存,这段内存在f函数结束后,就已经被系统忽略了。那么这个空间在程序运行过程中,很有可能被重新分配值,因此aa[0]就可能变成任意的值,而不是我们所希望的那个数组了。

正确的做法是用new来分配,这样得到的数组是在堆上面分配的。当然最后空间要自己释放。

int *f()
{
int *a=new int[2];
a[0]=1;
return a;
}

猜你喜欢

转载自blog.csdn.net/summer00072/article/details/80589873