delete为何不彻底?

pizazz 2003-05-25 05:04:13
例如 p 是个对象指针,为何 delete p 之后,还需加上 p=NULL; 这样才能使p真的为空指针?
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever1314 2003-05-27
  • 打赏
  • 举报
回复
加0是为了防止delete p后再次delete p后出错(由于误操作等);
delete p后p所指向的空间被释放,如果再次删除,就会出错。
将p赋0,如果再次执行delete操作就等于删除一个空指针,所以不会出错
cenphoenix 2003-05-27
  • 打赏
  • 举报
回复
delete p只是delete掉了p指向的空间,可是p并没有delete掉。它还是存在的,而且它还可以继续指向其他的内存空间。而c++中说delete一个指向不知道值的指针是危险的,可是delete一个指向null的指针是合适的。所以要给p=null;
pzytony 2003-05-27
  • 打赏
  • 举报
回复
下面提两点,让大家可以防止上面的情况出现:

1) 指针声明后要马上初始化。因为指针出现的缺省值是随机的,所以一定要赋值为NULL,然后再使用。

2) 调用了free和delete后一定要将指针赋值为NULL。原因上面已经提过了,就不再赘述了。



David2008 2003-05-27
  • 打赏
  • 举报
回复
万丈高楼 平地起
pegeon 2003-05-27
  • 打赏
  • 举报
回复
说得都有道理,我就不补充啦,呵呵
wahao 2003-05-25
  • 打赏
  • 举报
回复
全是高手啊!
一个三角号在学习ing
晨星 2003-05-25
  • 打赏
  • 举报
回复
还有一点,delete后,如果再把p置为NULL,则万一再有对p的delete操作,那么按照C++标准的规定,将不会产生错误。
因为C++标准规定对空指针的delete操作是个空操作,也就是什么都不作。
积木 2003-05-25
  • 打赏
  • 举报
回复
你怎么判断一个指针是否只想了一段内存呢?
通常的编程逻辑就是判断 p 是否为空
但是正如上面所说,c++中没有这种付空的功能,就只好自己做了
snipersu 2003-05-25
  • 打赏
  • 举报
回复
delete 后,p还指向那里,但给p分配的内存已经回收了,如果你不让p=NULL的话,如果你再次使用p的话(可能现在p所指的内存已经分配给别“人”了)就会出错。所以让p=NULL你如果再使用的话就监测到p=NULL程序就不做处理,即使处理也不会出事,只是报错。
lifanxi 2003-05-25
  • 打赏
  • 举报
回复
就是这样规定的。delete只是用于释放p所指的内存空间,并没有把p置0的责任。
detele后p所指的内容就不能用了,这里p就是一个所谓的野指针或叫悬挂指针,再把它置0只是为了安全,以后不致于不小心再用它。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧