+ -
当前位置:首页 → 问答吧 → 菜鸟的提问——关于野指针

菜鸟的提问——关于野指针

时间:2011-12-04

来源:互联网

最近看了一本书其中提到野指针。我的问题如下:
问1:作为一个菜鸟,怎样才能杜绝野指针的出现?
问2:野指针的出现在内存中是呈现一个什么样的景观?
问3:在用完new(或调用malloc()函数)之后,将内存用delete(或free()函数)释放后,是否还要将其设置为NULL指针?
问4:是否野指针一旦出现程序就会报错?如果不报错,那将怎样才能发现?
(我自己暂时就想到这么多。欢迎高手补充)

作者: alived_s   发布时间: 2011-12-04

我也是菜鸟,说说我的认识。O(∩_∩)O~
1.在声明指针的时候尽量把它指向NULL,例如:int *p = NULL;
2.这个好像跟这块地址的具体值有关,随机的吧。
3.貌似不用了,还没看过free()函数的实现,这点不太清楚。
4.可能会出错,也可能正常。
欢迎指正~

作者: moonclock   发布时间: 2011-12-04

养成良好习惯 谁分配谁delete并设NULL
假如初始化指针的时候没有new或者指向正确的东西最好设NULL
delete后也设NULL

作者: sryan   发布时间: 2011-12-04

引用 1 楼 moonclock 的回复:
我也是菜鸟,说说我的认识。O(∩_∩)O~
1.在声明指针的时候尽量把它指向NULL,例如:int *p = NULL;
2.这个好像跟这块地址的具体值有关,随机的吧。
3.貌似不用了,还没看过free()函数的实现,这点不太清楚。
4.可能会出错,也可能正常。
欢迎指正~


同意楼上部分观点,对于第3点,我认为delete或是free()后的指针,应该赋值为NULL,这是一个良好的习惯。如果你在程序中间使用delete或者free()而不把指针赋值为NULL,有可能你在继续编写代码时,不知道这个指针已经delete了,然后又去使用,这样有可能程序正常,但结果有问题,这样就不方便调试了,因为你不知道是程序有问题还是算法有问题,调试起来没有针对性,耗时!

作者: wumuzi520   发布时间: 2011-12-04