读书人

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

发布时间: 2012-02-17 17:50:42 作者: rapoo

函数堆栈释放困惑

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呢?

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

读书人网 >VC

热点推荐