- C/C++ code
int * f(void){ int i = 10; return &i;}int _tmain(int argc, _TCHAR* argv[]){ cout<<*f()<<endl; char end; cout<<"Press ENTER to exit"<<endl; cin>>end; return 0;}
测试环境是VS2005,看书上说局部变量在退出其所在程序块的地方销毁,对战在函数退出的时候清退。
那么上面的函数f()在调用完后局部变量i应该是被销毁了吧,为什么还能输出10呢?
------解决方案--------------------------------------------------------
调用完毕,堆栈指针往下移动,上面的数据还在,但是再次调用别的函数,堆栈往上扩张,数据就被破坏了。所以这么做是不可靠的。