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

来分析个诡异的结果,该如何解决

2012-03-15 
来分析个诡异的结果#include iostreamusing namespace stdint* add(int a,int b){int tempa+bint* te

来分析个诡异的结果
#include <iostream>
using namespace std;

int* add(int a,int b)
{
int temp=a+b;
int* temp2=&temp;
cout<<temp2<<endl;
return temp2;
}

void main()
{
int* a;
a=add(1,2);

cout<<&(*a)<<endl; //1
cout<<*a; //2
}
2出输出不了结果,但是把2处移到1处可以出结果,谁能分析下内部原理?

[解决办法]
局部变量堆栈在函数退出的时候被释放,但是释放后该块内存仍然为上一次操作的结果,在未被再次使用之前,仍保存为前一次的值。

你这里返回了一个局部变量的指针,语句1需要用到堆栈,所以会将前面函数释放后的堆栈内存重写,2当然就输不出前面的结果了。如果将2移到1处,这时前面函数释放的堆栈内存还没被重写,所以才输出了你想要的值。

总的来说返回局部变量的地址是危险的,因为它随时可能被重写。

热点排行