首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

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

2012-02-17 
函数堆栈释放困惑C/C++ codeint * f(void){int i 10return &i}int _tmain(int argc, _TCHAR* argv[]){

函数堆栈释放困惑

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

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

热点排行