首页 > 解决方案 > 为什么我不能在用新对象替换对象之前删除它?

问题描述

我有一个 2D 类型的对象指针数组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++,我不应该删除这个对象以避免内存泄漏吗?

编辑:这就是我分配的方式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;
        }
    }
}

标签: c++arraysc++11objectpointers

解决方案


推荐阅读