我在类的构造函数中分配了一些指针,然后尝试在其析构函数中删除它们:

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()函数中的指针显式分配了内存。

我犯什么错误?

最佳答案

您必须将deletenew匹配,并且将delete[]new[]匹配。将一个与另一个混合会导致问题。因此,如果您这样做:

p_p_map = new Tile*[x];


您必须像这样删除它:

delete[] p_p_map;


并与

delete[] p_p_map[i];


如果您创建类似:

pSomething = new Type;


然后您将其删除,例如:

delete pSomething;

10-06 00:05