函数结束后,函数所占空间会自动销毁。那下面代码为什么还能得到局部变量的地址与值呢?

#include<iostream>usingnamespacestd;int*fun(){intval=10;cout<<&val<<endl;return&val;}... #include <iostream>
using namespace std;

int* fun()
{
int val=10;
cout<<&val<<endl;
return &val;
}

int main()
{
int* p = fun();
cout<<*p<<endl;
cout<<p<<endl;
}
展开
 我来答
百度网友58f1315
2012-05-24 · TA获得超过857个赞
知道小有建树答主
回答量:290
采纳率:83%
帮助的人:201万
展开全部
所谓的自动销毁是指写开禁,比如你这个程序运行时用到了int *p,这个p在电脑的内存里就占了一个位置,你在电脑上再运行其它程序的时候,就不能把那个位置分配给其它程序使用了。
当你函数结束后,这个变量自动销毁了,也就是允许其它程序得到这个变量在内存中的位置了,但是这个位置的数据并没有改变,电脑没必要给这个位置进行清零操作。所以如果你在新的程序中得到这个位置后,没有初始化,而是直接调用这个位置的值,那么得到的还是上一次那个变量的值。
草根英雄1
2012-05-24 · TA获得超过409个赞
知道小有建树答主
回答量:379
采纳率:0%
帮助的人:233万
展开全部
那么这段代码可以运行是因为,你返回的地址在内存中仍然存在.return (int)&val。就是说,发生了隐式类型转换c/c++完全可以做到把整型变量当做指针使用,那么,假如其他程序又用到这个地址,程序就会奔溃。切记不要返回局部变量的地址,如果非要这么做,使用new运算符。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
moonbirdzz
2012-05-24
知道答主
回答量:25
采纳率:0%
帮助的人:27.1万
展开全部
val那块内存地址随时都有可能被收回重新利用,所以返回临时变量的指针是不安全的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式