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不会通过,会继续往下,那利用到这块堆上的时候就有问题了;
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; //不会出问题
}