野指针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;    //不会出问题
}
相关推荐
咕咕嘎嘎10244 小时前
C++六个默认成员函数
c++
亭上秋和景清6 小时前
指针进阶:函数指针详解
开发语言·c++·算法
胡萝卜3.06 小时前
C++现代模板编程核心技术精解:从类型分类、引用折叠、完美转发的内在原理,到可变模板参数的基本语法、包扩展机制及emplace接口的底层实现
开发语言·c++·人工智能·机器学习·完美转发·引用折叠·可变模板参数
9ilk6 小时前
【C++】--- C++11
开发语言·c++·笔记·后端
FMRbpm6 小时前
队列练习--------最近的请求次数(LeetCode 933)
数据结构·c++·leetcode·新手入门
biter down6 小时前
C++ 函数重载:从概念到编译原理
开发语言·c++
中冕—霍格沃兹软件开发测试6 小时前
测试用例库建设与管理方案
数据库·人工智能·科技·开源·测试用例·bug
ZouZou老师7 小时前
C++设计模式之解释器模式:以家具生产为例
c++·设计模式·解释器模式
无限进步_8 小时前
深入理解 C/C++ 内存管理:从内存布局到动态分配
c语言·c++·windows·git·算法·github·visual studio
JANGHIGH8 小时前
c++ 多线程(三)
开发语言·c++