空指针 · 野指针 · 悬垂指针 —— 三种危险

指针错误的三种典型形态,以及对应的安全写法(nullptr 初始化 · delete 后置空 · 先判空再解引用)
① 野指针 未初始化,指向随机地址 int *p; *p = 9; // 写入未知地址 p 0x???? ? 未定义行为 / 可能崩溃 ✓ 正确写法 int *p = nullptr; 先赋有效地址再解引用 ② 解引用空指针 nullptr 不指向任何对象 int *p = nullptr; *p = 9; // 解引用空指针 p 0x0 (null) 运行期崩溃 (segfault) ✓ 正确写法 if (p) *p = 9; 解引用前先判空 ③ 悬垂指针 指向已被释放的内存 int *p = new int(9); delete p; *p = 5; // p 仍指旧地址 p 0x5f…c8 堆 heap 9 已释放 访问失效内存 · 未定义行为 ✓ 正确写法 delete p; p = nullptr; 释放后立即置空 口诀:定义即初始化 nullptr · 解引用前先判空 · delete 之后立刻置空