读书人

局部变量的有关问题

发布时间: 2014-01-05 18:22:56 作者: rapoo

局部变量的问题
int* fun()
{
int i=5;
int* p=&i;
cout<<p<<endl;
return p;
}
int main()
{
int* p;
p=fun();
cout<<*p<<endl;
return 0;
}

不是说局部变量在函数结束时就不存在了吗?上面fun中的那个i应该在调用fun后就没有了,为什么最后还能输出值呢?最后的结果是5.求大神赐教!!
[解决办法]
没有及时擦除而已,你试试看这个就知道了,值的有效性只是延长了一点点而已,本身没有意义。

int main()
{
int* p;
p=fun();
cout<<*p<<endl;
cout<<*p<<endl;
getchar();
return 0;
}

不过你也千万不要这样干,能否在VS以外的情况下,仍然正确是未知的。
int main()
{
int* p;
p=fun();
int i=*p;
cout<<*p<<endl;
cout<<i<<endl;
getchar();
return 0;
}

[解决办法]
我使用mac的clang编译,也是结果等于5.
[解决办法]
内存怎么会不存在?
只不过是将这块内存的处理权利还给操作系统而已,后续这块内存的权利就属于操作系统了。
你这个程序只不过说明操作系统暂时还没有重新使用这块内存(或者分配给其他程序)。

读书人网 >C++

热点推荐