31.野指针和悬空指针
31.野指针和悬空指针
1. 野指针(Wild Pointer)
没有被初始化过、指向随机非法地址的指针。
-
特征:指针变量未赋值,值是随机垃圾值
-
典型场景:
int* p; // 未初始化 *p = 10; // 野指针访问,直接崩溃 -
危害:完全不可预测,大概率直接段错误
2. 悬空指针(Dangling Pointer)
指针曾经指向合法内存,但该内存已被释放,指针却没置空。
-
特征:指针非空,但指向的内存已经无效
-
典型场景:
int* p = new int(10); delete p; // 释放了内存 *p = 20; // p 变成悬空指针 -
危害:读写已释放内存,导致数据错乱、重复释放、崩溃
一句话区分
- 野指针:不知道指向哪, born bad
- 悬空指针:曾经有效,现在失效,turned bad
共同解决办法
- 初始化时指向
nullptr - 释放内存后立即置空
p = nullptr; - 使用前判空

浙公网安备 33010602011771号