刪除指針我有一些球,我在類的構造函數分配,然後嘗試在它的析構函數刪除:在析構函數
TileMap::TileMap(int x, int y) {
mapSize.x = x;
mapSize.y = y;
p_p_map = new Tile*[x];
for(int i = 0; i < x; i++) {
p_p_map[i] = new Tile[y];
}
randomize();
}
TileMap::~TileMap() {
for(int i = 0; i < mapSize.x; i++) {
delete p_p_map[i];
}
delete p_p_map;
}
void TileMap::randomize() {
for(int i = 0; i < mapSize.x; i++) {
for(int j = 0; j < mapSize.y; j++) {
p_p_map[i][j] = *new Tile(Tile::TileSize * i, Tile::TileSize * j, TileType::randomType());
}
}
}
在程序結束時調用析構函數釋放內存我分配的指針,但是當它到達「delete p_p_map [i];」時在析構函數中,XCode通知我該指針未被分配。我是C++的新手,但我覺得我很明確地將內存分配給了randomize()函數中的指針。
我犯了什麼錯誤?
使用'std :: vector'和'std :: unique_ptr'''' boost :: unique_ptr'或'std :: shared_ptr'''' boost :: shared_ptr',您將獲益良多,而不是管理內存你自己。 – 2014-11-03 14:39:53
這聽起來像你沒有遵循[Rule of Three](http://stackoverflow.com/questions/4172722),如果你堅持通過虐待原始指針來管理動態對象,這很容易中斷。使用'std :: vector'。 – 2014-11-03 14:46:45