野指针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;    //不会出问题
}
相关推荐
laocooon5238578865 小时前
写代码 调bug相关信息
bug
Yu_Lijing5 小时前
基于C++的《Head First设计模式》笔记——策略模式
c++·笔记·设计模式
鸿儒5175 小时前
记录一个C++操作8位影像的一个bug
开发语言·c++·bug
脏脏a5 小时前
深度剖析 C++ string:从 0 到 1 的模拟实现与细节解析
开发语言·c++
福尔摩斯张5 小时前
【实战】C/C++ 实现 PC 热点(手动开启)+ 手机 UDP 自动发现 + TCP 通信全流程(超详细)
linux·c语言·c++·tcp/ip·算法·智能手机·udp
罗湖老棍子5 小时前
【例3-3】医院设置(信息学奥赛一本通- P1338)
数据结构·c++·算法·
历程里程碑6 小时前
C++ 4:内存管理
java·c语言·开发语言·数据结构·c++·笔记·算法
LXS_3576 小时前
Day17 C++提高 之 类模板案例
开发语言·c++·笔记·算法·学习方法
2301_789015626 小时前
C++:多态(面向对象的主要手段之一)
c语言·开发语言·c++·多态
小年糕是糕手6 小时前
【C++】string类(一)
linux·开发语言·数据结构·c++·算法·leetcode·改行学it