删除析构函数中的指针

乔卡尔·雷尼森(Jokull Reynisson)

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

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

我犯什么错误?

uesp

你一定要配合delete使用new,并delete[]new[]将一个与另一个混合会导致问题。因此,如果您这样做:

p_p_map = new Tile*[x];

您必须像这样删除它:

delete[] p_p_map;

并与

delete[] p_p_map[i];

如果您创建类似以下内容:

pSomething = new Type;

然后您将其删除,如下所示:

delete pSomething;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章