正确分配和释放2d指针数组到对象

时间:2013-10-03 12:57:47

标签: c++ arrays pointers multidimensional-array 2d

基本上我正在编写一个RPG游戏,它有一个父类型的对象叫做'Piece',代表地图上的一块或一个对象。 Map类有一个指向这些Piece对象的2d指针数组,它在Map.h头文件中声明为:

Piece *** level;

当使用带有要加载的地图目录的参数调用地图类时,它会加载地图文件并获取其尺寸。它获取要分配的地图的高度和宽度。在我的关卡数组中,我想将它视为此级别[x] [y],其中x是地图上的x坐标,y是地图上的y坐标。我完成了这样的分配:

level = new Piece**[width];
for (int i = 0; i < width; i++)
{
    level[i] = new Piece*[height];
}   

我也初始化所有元素:

for (int i = 0; i < height; i++)
    for (int k = 0; k < width; k++)
        level[k][i] = 0;

现在我的游戏正常运行,但是我不知道如何释放级别数组,因此会导致内存泄漏。我试过像这样的释放:

for (int i = 0; i < height; i++)
    for (int k = 0; k < width; k++)
        if (level[k][i] != 0)
            delete level[k][i];

我已经尝试过上面的代码,但无济于事。

请提前帮助我,我不知道如何解除分配这个2d指针数组。

1 个答案:

答案 0 :(得分:0)

vector<vector<shared_ptr<Piece>>> game_map(Y, vector<shared_ptr<Piece>>(X));
for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        // notice position of x and y
        game_map[Y][X] = make_shared<Piece>(); // or replace Piece with derived type
    }
}

无需删除任何内容。