私は宿題でオブジェクトの配列を削除する方法を理解するのに問題があります。 WndProc関数のforループによるオブジェクト配列の削除
Sprite* gCharacter[64] ;
そして:
宣言は次のようになります。このforループで
case WM_DESTROY:
for(int i = 0; i < 64;i++){
delete gCharacter[i];
}
delete gBackground;
delete gBackBuffer;
DeleteDC(ghSpriteDC);
PostQuitMessage(0);
return 0;
私はこのような何かしようとするだろう場合のようなアサーションエラーを取得:起こって、どのように適切にこのアレイを削除することで、なぜ私が理解することはできません
delete gCharacter[0];
delete gCharacter[0];
を。何も私はちょうど手動で入力する:delete gCharacter[from 0 to 63]
しかしそれはかなり乱雑に見えるだろう。
これは、このエラー
for(int i = 0; i < 180; i++){
gCharacter[i] = 0;
delete gCharacter[i];
}
を固定:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
が、私は私が最初にNULL値を設定する必要がない理由はわかりません。あなたが投稿限られたコードを考える
この配列の入力方法について説明できますか?すべてのオブジェクトはユニークですか? –
アサーションエラーだけでなく、 'gBackground'、' gBackBuffer'および宣言していない他の変数の宣言も投稿してください。同じ割り当てから2回同じセクションを削除することはできません。また、(私は、多くのケースを知っています)、gCharacterはどのように割り当てられましたか?彼らは 'new'や' malloc'を使いましたか?これは明らかにWin32であり、組み込み関数の中には、演算子 'new'と同じ方法で解放されない古いC関数を使用するものがあります。 –
各配列インデックスに有効なスプライトポインタがあることを確認してください。また、それらが明確であることを確認してください。例。 (int i = 0; i <64; ++ i)gCharacter [i] = newスプライト(...)の初期化。 – marcinj