Почему я не могу удалить объект, прежде чем заменить его новым? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть двумерный массив указателей объектов типа 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...