一、野指针与悬空指针野指针和悬空指针都指向非法内存野指针是指从未有效的指针出生时就没被赋值而悬空指针是曾经有效但已失效的指针。对象死了但指针还在两者一旦解引用会触发未定义行为绝大多数情况下会直接导致崩溃崩溃二、对比维度野指针悬空指针定义未初始化或已被赋值的指针指向垃圾地址指针曾指向内存但该内存已被释放或销毁根源忘了初始化是栈上的脏数据忘了通知释放内存却没把指针置空典型场景int *p;(指针p未赋初值直接使用)delete p; 没置nullptr,或函数返回了局部变量的地址崩溃时机随机崩溃使用崩溃三、常见异常场景悬空指针不只有delete。返回局部变量地址也是悬空指针置空并不能解决所有悬空问题当有多个指针指向该对象时还存在其他指针变量出现悬空地址。野指针不等于nullptr在栈上声明的指针变量其值是该栈帧内存中残留的随机脏数据。所以使用if(p!nullptr)方式防不住野指针。四、实战避坑强制初始化声明指针时必须初始化要么指向有效对象要么赋值为nullptr释放即置空delete或free后立即将指针赋值为nullptr缩小作用域尽量将指针声明在最小的作用域内开启编译器扫描警告终极解决方案RAII原则智能指针尽量避免使用裸指针。