2016-10-04 5 views
0

私はシューティングゲームをしており、一定時間後にスプライトがまったく読み込まれずに連続して撮影されるという問題が発生しています。私のコンソールでは、エラープリントアウト:C++/SDL2 IMG_Loadエラー(メモリ不足)

「IMG_LOAD_ERROR:メモリ不足です」:

私も弾薬数を表示するテキスト(SDL_ttf)を使用します(「IMG_LOAD_ERRORは、」私自身のものでした)。

私は今、私が作成したすべての敵のコンストラクタで常にIMG_load関数を呼び出すという仮説を立てていますが、それが原因であるかどうかはわかりません。私が考えることができる可能性がかなりあります。

また、テクスチャが破壊されたとき(敵の健康状態が悪いときや画面から離れたとき)にテクスチャを解放します。

誰かがこれを理解し、解決する手助けをすることができますか?

+1

コードを提供していないのにコードを提供していないことにご了承いただいたことに驚いています。私たちはあなたのコードが何が間違っているのかを把握するよう求めていることを認識していますか? – sokkyoku

+0

プログラムが実行された後、同じ単一のイメージでも、しばらくしているのでしょうか?後者の場合は、以前に割り当てたメモリを解放していない可能性があります(@Novrosの回答を参照)。 valgrindがあなたのOS上で動くことができるなら、おそらく、その種の間違いを見つけるのに最も簡単なツールです。もしそうでなければ、リークを見つけるために特別に設計された選択肢がありますが、バググリンドほど​​冗長ではないかもしれません。ソースコードを見るのはうれしいことですが、それを知っていてまだコードを投稿していないのであれば、質問には大きすぎると思われます。 – keltar

答えて

1

あなたが必要としないテクスチャ/画像やレンダリングを破壊していないようです。

SDL_DestroyTexture(img); SDL_DestroyRenderer(レンダラー);

私が見つけた描画イメージの簡単な例https://gist.github.com/armornick/3434362

私のアドバイス:すべてのテクスチャを読み込んだり、アプリケーションを開始したり、必要があるときには一度でなければなりません。同じイメージをすべて再利用する必要があります。

コードを見て、コードが間違っていることを確認するといいでしょう。

+0

申し訳ありませんが、私は敵のデストラクタにメモリを解放していることを忘れています。* facepalm * – NJSADFNSDFNSFDN