allegro オープン ソース ライブラリを使用したシンプルなタンク ウォーズ スタイルのゲームがあります。私のタンク クラスでは、ビットマップ オブジェクトへのポインターの配列を 0 に初期化します。次に、メモリを割り当てて初期化する allegro 関数 create_bitmap を使用して新しいオブジェクトを作成します。
それから私はいつものように私の仕事に取り掛かります。
問題は、善良な OO 少年のようにクラス デストラクタでビットマップ メモリを解放しようとすると、プログラムがクラッシュすることです。これは、この特定のプログラムでは、allegro ライブラリがクラスの前にクリーンアップ (作成したビットマップ オブジェクトを解放する) を行うためです。範囲外になり、破壊されます。ただし、ポインタが再度 NULL に設定されるわけではないため、ビットマップがまだ有効かどうかを確認できず、解放しようとするとプログラムがクラッシュします。
これを回避する方法はありますか?NULL でない場合、有効なポインターをチェックできますか? クラスがプログラム内で別の方法で使用されている場合、メモリが解放されていることを確認するにはどうすればよいですか。現在のところ、私は基本的に削除せずに new を呼び出していますが、それは好きではありません。