野指针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;    //不会出问题
}
相关推荐
2401_8582861112 分钟前
CD45.【C++ Dev】STL库的list的使用
开发语言·数据结构·c++·list
暴躁茹2 小时前
C++中,std::async 一个用于异步编程的工具
开发语言·c++
斗转星移776 小时前
MFC中使用CRichEditCtrl控件让文本框中的内容部分加粗
c++·mfc·cricheditctrl·richedit2
景彡先生6 小时前
C++ 性能分析工具:Valgrind 与 perf
开发语言·c++
范纹杉想快点毕业7 小时前
解析Qt文件保存功能实现
java·开发语言·c++·算法·命令模式
C++ 老炮儿的技术栈7 小时前
C++实现手写strlen函数
大数据·c语言·c++·编辑器
2301_799084678 小时前
Codeforces Round 1032 (Div. 3)
数据结构·c++·算法
岁忧8 小时前
(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)
java·c++·算法·leetcode·职场和发展·go
AI+程序员在路上9 小时前
ABI与API定义及区别
c语言·开发语言·c++
电手9 小时前
Win11用户尽快删除更新!微软6月又推Bug
microsoft·bug