基本上我正在编写一个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指针数组。
答案 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
}
}
无需删除任何内容。