野指针bug

cpp 复制代码
RunUnit *UnitList[10000];
void aaaa()
{
    //用cu接收
    RunUnit *cu = UnitList[Index];

    /*
        利用UnitList[Index]中的数据,借助用cu做一系列的动作
    */

    //UnitList[Index]中的数据之后在哪都不再使用,这里把它销毁
    delete cu;
    cu = nullptr;
}

void bbbb()
{
    if(UnitList[Index] == nullptr)
    {
        continue;
    }

    int c = 0;        //会走到这里
    UnitList[Index].index = 0;    //会出问题
}

解释:cu和UnitList[Index]都指向同一块地址,他们在栈上的不同位置;

delete cu; :将堆上的地址给清掉;

但cu和UnitList[Index]都还是有值的,只是指向的地址没有数据;所以下次去判断UnitList[Index] == nullptr不会通过,会继续往下,那利用到这块堆上的时候就有问题了;

cpp 复制代码
RunUnit *UnitList[10000];
void aaaa()
{
    //用cu接收
    RunUnit *cu = UnitList[Index];

    /*
        利用UnitList[Index]中的数据,借助用cu做一系列的动作
    */

    //UnitList[Index]中的数据之后在哪都不再使用,这里把它销毁
    delete cu;
    UnitList[Index] = nullptr;   
}

void bbbb()
{
    if(UnitList[Index] == nullptr)
    {
        continue;
    }

    int c = 0;        //不会走到这里
    
    UnitList[Index].index = 0;    //不会出问题
}
相关推荐
今天又是充满希望的一天3 分钟前
C++分布式系统知识
开发语言·c++
zth41302113 分钟前
SegmentSplay‘s Super STL(v2.2)
开发语言·c++·算法
17(无规则自律)36 分钟前
DFS连通域统计:岛屿数量问题及其变形
c++·算法·深度优先
Yiyi_Coding1 小时前
BUG列表:如何定位线上 OOM ?
java·linux·bug
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 215. 数组中的第K个最大元素 | C++ 快速选择与堆排序题解
c++·算法·leetcode
「QT(C++)开发工程师」2 小时前
C++17三大实用特性详解:内联变量、std::optional、std::variant
jvm·c++
不爱吃炸鸡柳2 小时前
C++ STL 核心:string 从入门到精通(面试+源码+OJ实战)
java·c++·面试
南境十里·墨染春水2 小时前
C++笔记 Lambda表达式
开发语言·c++·笔记
悟渔2 小时前
用于STM32的C++编程的LED对象
c++·stm32·单片机
17(无规则自律)3 小时前
DFS:带重复项的全排列,程序运行全流程解析
c++·算法·深度优先