的陣列所以,我有一個類堆損壞當刪除指針
class Room {
public:
Room();
~Room();
tile::Tile* tile[11][7]; // Owned
}
的有一個構造和析構函數,tile::Tile
是一個抽象基類,所以是一個指針。指針數組tile,需要像這樣在構造函數中填充。
Room::Room() {
for (std::size_t i = 0; i < 11; ++i) {
for (std::size_t j = 0; j < 7; ++j) {
this->tile[i][j] = new tile::Empty();
}
}
}
從我的理解,我也應該在Room
的析構函數刪除這些。
Room::~Room() {
for (std::size_t i = 0; i < 11; ++i) {
for (std::size_t j = 0; j < 7; ++j) {
delete this->tile[i][j];
}
}
}
然而,這樣做導致的0xc0000374
返回代碼,這是一個堆損壞錯誤。爲什麼這個腐敗錯誤發生?
最小例如
class Tile {};
class Empty: public Tile {
public:
Empty() {}
};
class Room {
public:
Tile* tiles[5];
Room() {
for (int i = 0; i < 5; ++i) {
tiles[i] = new Empty();
}
}
~Room() {
for (int i = 0; i < 5; ++i) {
delete tiles[i];
}
}
};
class Maze {
public:
Room rooms[5];
Maze() {
for (int i = 0; i < 5; ++i) {
rooms[i] = Room();
}
}
};
int main() {
Maze maze = Maze();
}
你已經損壞了創建和銷燬之間的堆。猜測你做了什麼或做什麼是不可能的。 – molbdnilo
什麼是'tile :: Empty()'? – SomeWittyUsername
由於@molbdnilo說錯誤在別處。將上面的代碼轉換成[mcve]並查看它是否仍然發生。 –