我有一个如下所示的析构函数:
Tilemap::~Tilemap(void)
{
if(width>0 && height > 0)
{
for (int x = 0; x < getMapWidth(); x++)
{
for (int y = 0; y < getMapHeight(); y++)
{
if(getTileAtPoint(x,y)->isInteractable())
{
delete getTileAtPoint(x,y)->getInteractable();
}
}
}
SAFE_DELETE_ARRAY(tileArray);
}
return;
}
SAFE_DELETE_ARRAY() 只是一个看起来像这样的宏:
#define SAFE_DELETE_ARRAY(ptr) { if(ptr) { delete [](ptr); (ptr)=NULL; } }
tileArray 是一个动态分配的数组,其中包含包含可交互对象的图块。它的声明如下所示:
tileArray = new Tile[mapWidth*mapHeight];
每当我删除代码的双 for 循环部分并留下以下内容时:
Tilemap::~Tilemap(void)
{
if(width>0 && height > 0)
{
SAFE_DELETE_ARRAY(tileArray);
}
}
我得到内存泄漏,因为我声明的可交互对象没有被删除。但是,当我离开双 for 循环时,代码使其通过 for 循环就好了,但随后在 SAFE_DELETE_ARRAY 上崩溃并显示以下错误消息:
Spaceship.exe 中 0x008927CC 处的未处理异常:0xC0000005:访问冲突读取位置 0xFEEEFEEE。
请问有人知道解决这个问题的方法吗?