首页 新闻 会员 周边 捐助

C 语言 为什么释放后指针指向的值不是0

0
悬赏园豆:5 [已解决问题] 解决于 2013-07-21 20:53

代码和调试结果如下图:

麻烦大家帮我看看是怎么回事。。

问题补充:

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2013-06-28 09:22
< >
分享
最佳答案
1

- -! 同学你c++学得有点问题啊

指针初始化不分配会形成野指针

指针释放后不指向null也会形成野指针

 

“野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if无法判断一个指针是正常指针还是“野指针”。有个良好的编程习惯是避免“野指针”的唯一方法。

 

野指针的成因主要有三种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块
三、指针操作超越了变量的作用范围。比如不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。
收获园豆:3
WuRang | 小虾三级 |园豆:1730 | 2013-06-28 09:25
其他回答(1)
0

术语言 就是 free() 执行后 会是 野指针  上面的数据 是不确定的 也许会是 别的程序的数据

一般 执行完 free() 后  ,再添加一句   pointer=NULL

收获园豆:2
ywp | 园豆:210 (菜鸟二级) | 2013-07-01 08:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册