1

私の質問を説明するには:

のオブジェクトを保持する、という名前の単純なベクトル配列があります。ゲーム内のレベルのレベル選択メニューで、プレーヤーがレベルをクリックすると、その特定のレベルのすべての敵をベクトル配列に押し戻します。

現在、私はすべての敵に対して3つのレベルしか完全に実行していません。今日、4番目のレベルを実行しようとすると、スタックオーバーフローが発生し続けます。そして、なぜこれが起こっているのかわかりません。つまり、最初にレベル選択メニューに到達してからキーボードの何かを押したときにのみ、配列に何かが割り当てられることは確かですが、すぐにクラッシュすることはありません。

したがって、pseduoコードに関しては、次のようにします。

switch(keyboardInput)
    //ALL keyboard button specific input
    default:
        if (levelSelected == 1)
              //push back level 1 enemies into vector
        elseif (levelSelected == 2)
             //push back level 2 enemies into vector etc. etc.

ベクトル配列にプッシュされている数値に関して:

レベル1=26人の敵

レベル2=113人の敵

レベル3=204人の敵

レベル4=38人の敵(このレベルの作成が途中で終わっていない

合計=381人の敵。

4レベルに追加したばかりのベクトルプッシュバックのいくつかをコメントアウトすると、ゲームは正常に実行されます。しかし、明らかにこれは、レベルに敵を割り当てることができるようにするために克服する必要がある問題です。

参照用にファイル" chkstk.asmでクラッシュします。これで少し混乱します。なぜこれが私の主な質問なのですか?そしてうまくいけば、この問題をどのように克服する必要がありますか?

どんな助けでも大歓迎です!

編集:いくつかの質問に答えるために、コードで再帰を使用していません。エラーをより詳しく理解するために、ここにスクリーンショットを示します。

エラーが返されました

合計86枚の画像と3つのフォントを読み込んでいます。しかし、それらのいくつかをコメントしても、上記と同じエラーメッセージが表示されます。注目に値する他の唯一のものは、実際には敵のクラス自体です。しかし、具体的には、いくつかの変数といくつかのアニメーションだけが当てはまります。敵ごとに利用できるアニメーションは全部で4つあり、アニメーションがあるものとないものがあります。以下にアニメーションクラスを投稿します。 http://pastebin.com/X3GUgJiJ-ヘッダー

http://pastebin.com/pL1iEkiy-.cppコンテンツ。

それでも、そこにかなりの記憶が詰まっているものがあるかどうかはわかりませんが。

編集2: それで、ここに私のレベル選択コードへのリンクがあります、それはかなり大きいです。コード自体のほとんどは、レベル選択画面にゲームに関連しており、正しい画像をレンダリングします。 http://txtup.co/YLVRo

編集3: ベクトル配列に押し戻されているすべての敵をコメントアウトすると、驚くべき結果が得られます。レベルの読み込みコードはエラーをスローします。これは、スタックを台無しにしている他の何かの結果である可能性がありますか、それとも実際に読み込みコードである可能性があります。それはスタックを台無しにしていますか?わからない。しかし、ここにレベルエラーの画像があります:http: //imgur.com/2fySY

編集4: それで、コードを調べるという長いタスクの後、私が理論を持っているかもしれないと思う問題を引き起こしている可能性があるものを見てください。したがって、各Enemyオブジェクトには、4つの異なるアニメーションを使用する可能性があります。5本当に、しかしそれは長い話です、異なるサイズの敵のための1つのアニメーションの基本的に2つの異なるバージョンがあります。したがって、それをいくつかの図に入れると、これらのアニメーションは、Animationというタイトルの独自のクラスになります。アレイにプッシュバックされたすべての敵オブジェクトには、使用可能なすべての特定のアニメーションの独自のインスタンスが含まれるため、時間が経つにつれて、私が知らない問題が増えている敵を追加してきました。ますます悪くなった。

つまり、合計で1524のアニメーションインスタンスになります。現在、ほとんどのコードをコメントアウトしています。私が考えた大きなことのほとんどが問題を引き起こしている可能性があります。ゆっくりと私は物事を試みている行のコメントを外し、これが実際に正しいことを確認しています。何をすべきかという問題が残っていますか?

4

1 に答える 1

1

スタックオーバーフローの潜在的な原因は3つだけです。

  1. 無限/過剰な関数の再帰。
  2. スタックに過度に大きなオブジェクトを割り当てる。
  3. スタックフレームリンクポインタを上書きします。
    • スタック上のアレイのバッファオーバーフローが原因である可能性があります
    • または、期限切れのポインタまたはローカル変数への参照を使用します。

これらのいずれも、おそらくの誤用に起因するものではありませんvector。おそらく、に関連する何かpush_backが既存の問題を悪化させています。

大きな銃を持ち出したい場合は、Valgrindを試してください。しかし、物事を煮詰めて、不必要な詳細を取り除く必要があるようです。特定の番号についてはそれほど気にしないでください。プログラムが適切に記述されている場合、1524アニメーションインスタンスは2とまったく同じである必要があります。

于 2012-07-22T11:37:38.853 に答える