ダブル ポインターを使用していますが、それを削除しようとすると、ヒープの破損が発生します。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 がオブジェクト「スプライト」から継承する「タイル」のオブジェクトである場合、3 つのデストラクタすべてが仮想 (マップ、タイル、スプライト) として設定されます。