#include <iostream>
using namespace std;
int* foo()
{
 int i = 100 ;
 int *p = &i;
 return p ;    
}
int main()
{
 cout<<*foo()<<endl;   
 system("pause"); 
}这段代码为什么可以正常执行,我的int不是在栈上面定义的吗,按理说foo方法执行完毕之后i就会被销毁了,但是为什么还可以通过指针访问它呢,很不解。

解决方案 »

  1.   

    这段代码为什么可以正常执行,我的int不是在栈上面定义的吗,按理说foo方法执行完毕之后i就会被销毁了,但是为什么还可以通过指针访问它呢,很不解。
    =============
    理论上i是收回了,但是, i所占的那块空间很可能没有马上被占用,所以你通过指针还可以访问到它,不过,上面那段代码的结果是不确实的。
      

  2.   

    变量i的空间是在堆栈中,退出 foo 函数后虽然不能使用i来访问,但使用地址仍然是可以访问的,只是数据可能是随机的,不过调用foo后没有再调用其它函数占用该堆栈空间,所以值暂时未变。