读书人

关于《C++primer》13.5提到的悬垂指针

发布时间: 2012-09-05 15:19:35 作者: rapoo

关于《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=&i;
cout<<*p<<endl;//这个P还未成为悬垂指针之前。
}
void main()
{
fun();
cout<<*p<<endl;
}


……

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

读书人网 >C++

热点推荐