我正在使用双指针,但是当我尝试删除它时会导致堆损坏:CRT 检测到应用程序在堆结束后写入内存。它在对象的析构函数内“崩溃”:
Map::~Map()
{
for(int i = 0; i < mTilesLength; i++)
delete mTiles[i];
delete[] mTiles;
}
mTiles 声明如下:
Tile **mTiles = NULL;
mTiles = new Tile *[mTilesLength];
for(int i = 0; i < mTilesLength; i++)
mTiles[i] = new Tile(...);
如果值得注意的 mTiles 是从对象“Sprite”继承的“Tile”对象,则所有 3 个析构函数都设置为虚拟(地图、瓷砖、精灵),不确定这是否有任何区别,但直到现在似乎都有效。