我有一段代碼正在創建一個基於圖塊的級別。爲什麼不訪問已刪除的對象導致我的程序崩潰?
class Level {
//Variables
//===================================================
public:
Tile *** TileGrid; //A 2d array of pointers to tiles
int TilesWide, TilesTall;
//Methods
//===================================================
public:
Level::Level(char * fileName);
Level::~Level();
void Draw();
};
我爲TileGrid分配內存,一切都很好。我也爲這個班級設置了一個析構函數。
Level::~Level() {
for (int i = 0; i < TilesTall; i++) {
for (int j = 0; j < TilesWide; j++)
//delete the looped tile being pointed to
delete TileGrid[i][j];
//delete the row
delete [] TileGrid[i];
}
//delete the array of rows
delete [] TileGrid;
}
對於咯咯我決定我會刪除我的Level實例。在我這樣做後,我發現我仍然可以調用它的Draw方法。
在調試器中,TilesWide和TilesTall的值是一個巨大的負數,所以我的for循環迭代網格時沒有繪製任何值。
試圖訪問一個刪除的變量不會導致某種崩潰?
@LuchianGrigore:不,這個問題是不同的。這個問題是關於返回一個局部變量的地址;這是關於在堆上使用後免費的。 – 2013-02-13 20:20:58