【发布时间】:2014-12-30 05:35:06
【问题描述】:
我在类的构造函数中分配了一些指针,然后尝试在其析构函数中删除:
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() 函数中的指针。
我犯了什么错误?
【问题讨论】:
-
您将从使用
std::vector和std::unique_ptr/boost::unique_ptr或std::shared_ptr/boost::shared_ptr而不是自己管理内存中受益匪浅。 -
听起来您没有遵循Rule of Three,如果您坚持通过自虐式处理原始指针来管理动态对象,则很容易破坏。使用
std::vector。