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

关于《C++primer》13.5提到的悬垂指针,做了个简单的小程序,结果出有关问题了

2012-09-05 
关于《C++primer》13.5提到的悬垂指针,做了个简单的小程序,结果出问题了。C/C++ code#include iostreamusin

关于《C++primer》13.5提到的悬垂指针,做了个简单的小程序,结果出问题了。

C/C++ code
#include <iostream>using namespace std;int *p=NULL;void  fun(){ int i=10; p=&i;}void main(){ fun(); cout<<*p<<endl; cout<<*p<<endl;}//为什么*p只能正确输入一次,然后*p就变成随即数了?

//应该是fun()调用完了后,p就应该成为悬垂指针了,然后p直接输出随机数,而不是先输出1次局部变量i的值,然后再输出随机数哦?

[解决办法]
fun()调用完了后,p就成为悬垂指针了,成为悬垂指针后其指向的内容已经和你没关系,指向的内容随时可能改变,也可能一直不改变。
[解决办法]
探讨

fun()调用完了后,p就成为悬垂指针了,成为悬垂指针后其指向的内容已经和你没关系,指向的内容随时可能改变,也可能一直不改变。

[解决办法]
悬垂指针指向的内容你无法控制,可能变了,也可能没变
[解决办法]
这跟很多因素有关系。 fun()调用完了后,p就应该成为悬垂指针了,这是绝对正确的。
比如
fun();
char *pc = new char[100];
pc = "aaa";

cout<<*p<<endl;
cout<<*p<<endl;
这时2次输出p就都是随机值了。
[解决办法]
你用release跑下规律可能又不一样了,没必要追究这个。
[解决办法]
OS去管理的
[解决办法]
探讨
C/C++ code


#include <iostream>
using namespace std;
int *p=NULL;
void fun()
{
int i=10;
p=&amp;i;
cout<<*p<<endl;//这个P还未成为悬垂指针之前。
}
void main()
{
fun();
cout<<*p<<endl;
}


……

[解决办法]
写未定义行为代码的后果往往是被编译器和os合伙调戏

热点排行