在Stack Overflow上看到这样一段代码
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
cout << *p;
*p = 8;
cout << *p;
}
运行结果:
我的想法是:
虽然函数调用结束,但是该内存并没有被销毁,由于p指针指向该内存并且后面并没有其它的函数调用,也就是说,该数据没有被覆盖,所以就肯定能输出5.
假如加上另外一个函数调用:
#include<iostream>
using namespace std;
int * foo()
{
int a = 5;
return &a;
}
void f1()
{
int b=10;
}
int main()
{
int* p = foo();
cout << *p<<endl;
f1();
cout << *p;
}
运行 结果:
由于后面的函数调用覆盖原来的内存的值,所以输出改变。