0

基本的に私は、マップ上のピースまたはオブジェクトを表す「ピース」と呼ばれるオブジェクトの親タイプを持つ RPG ゲームを書いています。Map クラスには、これらの Piece オブジェクトへのポインターの 2 次元配列があり、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];

上記のコードを試しましたが、役に立ちませんでした。

このポインタの 2 次元配列の割り当てを解除する方法がわかりません。よろしくお願いします。

4

1 に答える 1

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
    }
}

何も削除する必要はありません。

于 2013-10-03T13:29:54.727 に答える