私はゲームを持っていますが、問題のために削除されています。GameHandlerクラス、Gameクラス、およびGridクラスです。コンストラクタの後でオブジェクトが一見削除されたり、メモリが変更される
GameHandlerクラスには、そのヘッダーファイルにGameオブジェクトの宣言があります。 GameHandlerコンストラクタは、ゲームオブジェクトが再構築、そう
game = Game();
ゲームは、それのヘッダファイルのグリッドオブジェクトへのポインタの宣言を有します。次に、コンストラクタはGridオブジェクトを定義します。
grid = new Grid(x, y, z);
次に、ゲームを最後まで(死亡または完了によって)進めることができます。私はゲームを終了すると、GameHandlerは私に再び起動するオプションを与え、これを行うために、私は単純にゲームの状態をリセットし、再度
game = Game();
を呼び出すと考えました。これは文句なしで、新しいゲームオブジェクトを作成して新しいグリッドを作成するように見えます。グリッドを更新したり描画したりするまでに、グリッドを構築した後、グリッド内のすべての変数の位置が0xfeeefef2などのデータを指しています。いくつかの検索に基づいてプログラムの実行中に削除されました。これが削除される唯一の場所は、ゲームのデストラクタです。
私は現在ゲームオブジェクトを上書きしていますが、上書きしたオブジェクトはデストラクタと呼ぶことにしました。デストラクターはグリッドを消して空にします。私は正直なところ手がかりがないので、どんな洞察も良いでしょう。
は、あなたのテストケースを表示します。 –
ゲームコンストラクタ、代入演算子、およびゲームとグリッドのデストラクタも表示してください。 – dasblinkenlight
コピー・コンストラクターはLightnessが指摘している可能性が高いです。ただし、このシナリオではGameの「リセット」メソッドを定義し、新しいオブジェクトを作成する代わりにそのメソッドを呼び出すことをお勧めします。私はここにゲームオブジェクトを作成したりコピーしたりすることに何の価値も見ません。 Gameオブジェクトを本当に破棄して新しいオブジェクトを作成したい場合は、代わりにスマートポインタを使用して、コピーを呼び出さないようにします。 – Gerald