У меня есть двумерный массив указателей объектов типа Organism
, который объявлен как Organism*** organisms;
, и у меня есть функция, которая заменяет один объект в этом массиве другим. Вот как я пытался написать эту функцию:
void World::SetOrganism(Organism * org, const Position & pos) {
if (pos.x < width && pos.x >= 0 && pos.y < height && pos.y >= 0) {
delete organisms[pos.x][pos.y];
organisms[pos.x][pos.y] = org;
}
}
И вот как я вызываю функцию:
world.SetOrganism(new EmptyTile(this->position, world), this->position);
EmptyTile
наследуется от Organism
.
Проблема в том, что я всегда получаю эту ошибку Exception thrown: read access violation. this->organisms was 0x79E5D62E.
в строке с delete
. Я все еще изучаю C ++, я не должен удалять этот объект, чтобы избежать утечки памяти?
EDIT:
Вот как я распределяю organisms
:
World::World(const int& height, const int& width) {
this->width = width;
this->height = height;
organisms = new Organism * *[width];
for (int i = 0; i < width; i++) {
organisms[i] = new Organism * [height];
for (int j = 0; j < height; j++) {
Position* pos = new Position(i, j);
organisms[i][j] = new EmptyTile(*pos, *this);
delete pos;
}
}
}