我正在使用雙指針,但是當我嘗試刪除它時,它會導致堆損壞: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個析構函數都被設置爲虛擬(地圖,磁貼,精靈),並不確定這是否有所作爲,但似乎直到現在才起作用。
您的班級是否遵循三項規則? – chris
你能構建一個最小化的完整測試用例來證明這個問題嗎?你發佈的代碼沒有問題,所以問題在於別處。 – NPE
FWIW,您顯示的語法是正確的。 –