【问题标题】:Proper Allocation and Deallocation of a 2d array of Pointers to objects正确分配和释放指向对象的 2d 指针数组
【发布时间】:2013-10-03 12:57:46
【问题描述】:

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

Piece *** level;

当使用带有要加载的地图目录的参数调用地图类时,它会加载地图文件并获取其尺寸。它获取要分配的地图的高度和宽度。在我的关卡数组中,我想把它当作这个 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];

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

请帮助我,我不知道如何释放这个二维指针数组,在此先感谢。

【问题讨论】:

  • 你真的想成为three star programmer吗?
  • 我根本没有碰 3 星代码。
  • @BartoszKP +1 链接!对于 OP:您的代码需要这样的三重指针的可能性非常非常小。使用向量和引用(或智能指针)。
  • 因为 Piece 是许多派生类的父类,在一个级别中拥有不同类型的唯一方法是指针的二维数组或引用的二维数组。有人可以建议如何获得这个使用参考文献?
  • 如果高度是固定的,你可以linearize 二维数组到一维数组。

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


【解决方案1】:
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
    }
}

无需删除任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多