关于《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();
char *pc = new char[100];
pc = "aaa";
cout<<*p<<endl;
cout<<*p<<endl;
这时2次输出p就都是随机值了。
[解决办法]
你用release跑下规律可能又不一样了,没必要追究这个。
[解决办法]
OS去管理的
[解决办法]
[解决办法]
写未定义行为代码的后果往往是被编译器和os合伙调戏