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

一个奇怪的有关问题 求解释

2012-03-21 
一个奇怪的问题求解释#include iostreamusing namespace stdint * getPtr(){int number 3return &nu

一个奇怪的问题 求解释
#include <iostream>
using namespace std;
int * getPtr(){
int number = 3;
return &number;
}
int main(){
int * ptr = getPtr();
int number;

number = *ptr;
cout <<"number = "<<number<<endl;

number = *ptr;
cout <<"number = "<<number<<endl;
return 0;
}
第一次结果是3
第二次结果是1245000
为什么 ?


[解决办法]
int number = 3;
number是一个局部变量,在栈上,函数退出后就无效了,有可能被别人使用,所以结果不确定。

[解决办法]
#include <iostream>
using namespace std;
int * getPtr(){
int number = 3;//这里是在栈上分配的变量
return &number;//在这个函数执行完之后number 的空间会被释放
} //空间释放代表这个位置可以被重用,还没被重用之前,里面的值还是3
int main(){
int * ptr = getPtr();
int number;

number = *ptr;
cout <<"number = "<<number<<endl;//这是还没有被重用 所以还是3

number = *ptr;
cout <<"number = "<<number<<endl;//这时候被重用的 因此值变了,里面存的是什么,没人知道
return 0;
}

什么时候会被重用是未知的,因此不要这样操作
[解决办法]
int * getPtr(){
int number = 3;//这是一个临时变量,当函数调用结束后,它的内存空间会被释放
return &number;
}
int * ptr = getPtr();
int number;
number = *ptr;
第一次调用getPtr()函数结束时,这个函数中的变量number所占用的空间会被释放,但其空间中的内容有可能被别的值所覆盖,也可能还没被覆盖,是个不确定的值,你第一次输出3,其值可能还没被覆盖,而指针ptr仍然指向这个空间,第二次调用的时候,这个空间的值被别的值覆盖了,所以输出结果不一样

热点排行
Bad Request.