C/Cpp / 野指针和悬空指针

一、定义

  1. 野指针(Wild Pointer):没有初始化的指针。
  2. 悬空指针(Dangling Pointer):指向的内存已经释放。

二、危害

由于指向的是不安全不可控的区域,任何情况都有可能发生,比如:崩溃、执行结果错误、系统崩溃等。

三、如何避免

传统方法:每一个指针必须初始化为 null,可以避免 野指针 的产生。但是对于悬空指针来说就比较难处理,只能每次 delete 内存之后将指针置为 null,但是其他指向该内存的指针如果有遗漏没有置为 null 的则很容易造成悬空指针。

现代 C++ 基本上没有了上述问题,使用容器 shared_ptr 。该容器初始化时就将指针置为了 null,这样就避免了野指针;传入内存地址之后,智能指针析构时判断该内存块的引用计数,如果为 0 则自动释放内存,因为不会有真正的裸指针在代码中,也就无从谈起悬空指针,所有对指针的操作都是对对象(容器)而非指针,这样就避免了悬空指针的存在。

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部