int * func()
{
int a = 10;
return &a;
}
int main()
{
int *p = func();
cout << *p << endl;
cout << *p << endl;
system("pause");
return 0;
}
运行后
10
2049153416
一个输出数值一个输出地址,谁能告诉我为啥
堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放。
栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放
int a是一个局部变量,在fun函数结束后,编译器就自动释放了,所以哪怕返回了指向这个变量的指针,但是这个变量所在的内存可能被系统分配给其他的程序使用了。所以*p得到的结果就是一个不确定的值了。
总之记住的一句话:变量的生命期要判断清楚,一旦超出生命期,系统就会回收变量占用的空间。这块空间随时会被系统分配给其它进程或本进程的其它变量,原变量已失去控制权,所以出现啥样的值都有可能。