悬空指针
悬空指针(Dangling Pointer)是编程中的一种常见错误,指指针仍然保留着指向已被释放或回收的内存地址。当程序通过这类指针访问内存时,会导致未定义行为,可能引发程序崩溃或数据损坏。本文介绍了悬空指针的产生原因、典型案例以及避免方法。
背景速读
- **悬空指针** 是指编程中一个指针(即存储内存地址的变量)指向的内存区域已被释放或回收,但指针本身没有被重置。此时该指针指向的内存可能已被分配给其他用途,导致程序继续访问它时触发崩溃、数据损坏或安全漏洞。
- 这是 C 和 C++ 等手动管理内存的语言中一类常见且危险的缺陷。Rust 等现代语言通过编译时检查(所有权和借用机制)在编译阶段就防止了悬空指针的产生。
- 释放内存后立即将指针置为 NULL(空指针),可以在一定程度上缓解问题——访问空指针会立刻崩溃而非静默损坏数据,但更彻底的解法是避免手动内存管理的风险。
- 相关概念还包括**野指针**(未经初始化的指针)和**迷途指针**(指向已失效栈变量的指针),都属于内存安全问题,是许多缓冲区溢出漏洞和远程代码执行漏洞的根源。