目录
野指针和悬空指针都是在C/C++编程中常见的错误,它们会导致程序行为不可预测,甚至引发崩溃或安全漏洞。以下是对两者的详细解释和总结表格:
1. 野指针(Wild Pointer)
- 定义: 野指针是一个没有被初始化的指针,指向一个未知的或随机的内存位置。
- 产生原因: 当指针变量声明后没有被赋予有效的内存地址时就会成为野指针。
- 危害: 访问野指针会导致程序出现不确定的行为,如崩溃、数据损坏,甚至可能引发安全漏洞。
- 示例:
int *p; // 未初始化的指针,即野指针
*p = 10; // 未定义行为
2. 悬空指针(Dangling Pointer)
- 定义: 悬空指针是一个曾经指向有效内存位置的指针,但该内存已被释放或超出了其作用域。
- 产生原因: 当指针指向的内存被释放(如
delete
、free
操作)或指向的局部变量超出作用域时,指针成为悬空指针。 - 危害: 使用悬空指针访问已释放的内存可能导致程序崩溃、内存泄漏、或数据损坏。
- 示例:
int *p = new int(10);
delete p; // p 成为悬空指针
*p = 20; // 未定义行为
通过正确初始化指针并在释放内存后将指针置为nullptr
,可以有效防止野指针和悬空指针的问题。