一、定义
- 野指针(Wild Pointer):没有初始化的指针。
- 悬空指针(Dangling Pointer):指向的内存已经释放。
二、危害
由于指向的是不安全不可控的区域,任何情况都有可能发生,比如:崩溃、执行结果错误、系统崩溃等。
三、如何避免
传统方法:每一个指针必须初始化为 null,可以避免 野指针 的产生。但是对于悬空指针来说就比较难处理,只能每次 delete 内存之后将指针置为 null,但是其他指向该内存的指针如果有遗漏没有置为 null 的则很容易造成悬空指针。
现代 C++ 基本上没有了上述问题,使用容器 shared_ptr 。该容器初始化时就将指针置为了 null,这样就避免了野指针;传入内存地址之后,智能指针析构时判断该内存块的引用计数,如果为 0 则自动释放内存,因为不会有真正的裸指针在代码中,也就无从谈起悬空指针,所有对指针的操作都是对对象(容器)而非指针,这样就避免了悬空指针的存在。
(SAW:Game Over!)