c++,为什么可以delete空指针,不可以delete野指针

o__nly 2014-09-01 10:44:34
如题,想了好久没有说服自己。。不知道怎么和内存联系。。
...全文
1487 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊大1号 2018-07-06
  • 打赏
  • 举报
回复
mujiok2003 2014-09-02
  • 打赏
  • 举报
回复
NULL指针特殊处理了的, 没有什么好想的。
wanght99 2014-09-02
  • 打赏
  • 举报
回复
在实现上, 一块一块的内存是以链表的形式维护的, malloc的时候摘出一块内存来, 这块在内存头部写上这块内存的大小, 然后返回指向头部以后的内存的指针估程序使用. free的时候, 从传进来的参数倒退一点去看块的大小, 然后再把这块内存添到空闲链表里. 空指针很好处理, 参数是0那不处理就是了. 但野指针程序没法处理, 因为他不能去在管理空闲内存的链表里一个一个地找, 看这块内存是不是已经空闲了. 这样对性能影响太大, 只能假设它就是未free的, 从当前指针往前一点的位置读的数据就是表示大小. 然后做free操作.
熊熊大叔 2014-09-02
  • 打赏
  • 举报
回复
因为delete可以判断指针是否是空指针,但没法判断是否是野指针
神奕 2014-09-02
  • 打赏
  • 举报
回复
删除空指针是安全的,因为它什么也没做。 而野指针要么指向已经被释放的内存,那么就会二次delete;要么就是胡乱指向内存中的一块,你知道那块内存是用来干什么的呢?对其delete会发生未知的错误。
alex_my 2014-09-02
  • 打赏
  • 举报
回复
万一野指针指向哪块正在使用的内存怎么办?
jwj070524 2014-09-02
  • 打赏
  • 举报
回复
C中释放空指针是没有问题的,那么在C++中也没什么问题,C++兼容C嘛。野指针是指该指针指向的内存已经释放,但是指针没有赋NULL,那么以后使用该指针时会发生问题。
o__nly 2014-09-02
  • 打赏
  • 举报
回复
引用 4 楼 truelance 的回复:
因为delete可以判断指针是否是空指针,但没法判断是否是野指针
貌似有道理!
o__nly 2014-09-02
  • 打赏
  • 举报
回复
引用 3 楼 lisong694767315 的回复:
删除空指针是安全的,因为它什么也没做。 而野指针要么指向已经被释放的内存,那么就会二次delete;要么就是胡乱指向内存中的一块,你知道那块内存是用来干什么的呢?对其delete会发生未知的错误。
空指针指向哪里呢??
chimes298 2014-09-02
  • 打赏
  • 举报
回复
野指针是已经释放过内存的,该部分内存可能已经被分配给其他地方使用,这是再delete就可能程序崩溃。

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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