当前位置: 代码迷 >> VC >> 函数堆栈释放困惑解决方法
  详细解决方案

函数堆栈释放困惑解决方法

热度:5440   发布时间:2013-02-25 00:00:00.0
函数堆栈释放困惑
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呢?

------解决方案--------------------------------------------------------
调用完毕,堆栈指针往下移动,上面的数据还在,但是再次调用别的函数,堆栈往上扩张,数据就被破坏了。所以这么做是不可靠的。
  相关解决方案