Skip to content

Latest commit

 

History

History
14 lines (8 loc) · 1.4 KB

悬挂指针和野指针有什么区别?.md

File metadata and controls

14 lines (8 loc) · 1.4 KB
  1. 悬挂指针: 悬挂指针产生于指针所指向的内存已被释放或者失效后,指针本身没有及时更新或清空。在该内存释放之后,任何通过这个悬挂指针的引用或操作都是不安全的,因为这块内存可能已经重新分配给了其他的数据。

    示例:当一个指针指向动态分配(比如使用mallocnew)的内存,并且随后该内存被释放掉(使用freedelete),而没有将指针设置为NULL,此时这个指针就变成了悬挂指针。

  2. 野指针: 野指针通常是指未初始化的指针,它没有被设置为任何有效的地址。由于它可能指向任意位置,对野指针的解引用是危险的,并且可能会导致难以预测的行为甚至程序崩溃。

    示例:声明了一个指针变量但是没有给它赋予确定的初始值,然后就开始使用这个指针。

尽管两者看似相似,但是产生原因和解决方式有所不同:

  • 悬挂指针问题可以通过确保指针在释放关联的内存资源后立即被设为NULL来避免。
  • 野指针问题则需要确保每个指针变量在使用前都被明确初始化为一个合法的地址或NULL

处理这两种类型的指针时,编程中的最佳实践是始终确保你的指针在声明后得到适当的初始化,在资源被释放之后更新状态,并且在解引用之前检查其有效性。