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;
  • 使用前判空
posted @ 2023-07-03 21:23  CodeMagicianT  阅读(155)  评论(0)    收藏  举报