我在类的构造函数中分配了一些指针,然后尝试在其析构函数中删除它们:
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());
}
}
}
在程序结束时,调用析构函数以释放我分配的指针的内存,但是当到达“删除p_p_map [i];”时,该析构函数将被释放。在析构函数中,XCode通知我未分配指针。我是C ++的新手,但我觉得我已经为randomize()函数中的指针显式分配了内存。
我犯什么错误?
最佳答案
您必须将delete
与new
匹配,并且将delete[]
与new[]
匹配。将一个与另一个混合会导致问题。因此,如果您这样做:
p_p_map = new Tile*[x];
您必须像这样删除它:
delete[] p_p_map;
并与
delete[] p_p_map[i];
如果您创建类似:
pSomething = new Type;
然后您将其删除,例如:
delete pSomething;