スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メモリリーク発生(していた)

windowsAPIを使った 自作ゲームについてですが、
この前、メモリリークをしていないか調べてみました
(メモリリーク ・・・ PCの使用可能なメモリ容量がだんだん減っていく現象。)

結論から言うと、メモリリークがいっぱいありました。
(8箇所ほど)

【しらべかた】
#include<crtdbg.h>を追加する。
②WinMain関数の直後に下記の1行を追加する。
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);


こうすると、デバッグの後メモリリークしているかが表示されるようになります。

【参考画像】"クラスまみれのゲームプログラミング入門"より
メモリリーク


クラスでコンストラクタとデストラクタを使っているから大丈夫だろう
と思っていたのですが、全然ダメだったようです(´・ω;`)

自分のゲームはEscキーを押すと終了するようになってます。
スレッドが終了する瞬間にデストラクタが呼ばれないので、
開放されずにメモリリークしている模様。

どうしよう。
対処法は今 調べています。
もっとも簡単な方法はnewをしないようにするなのですが、
この方法はとりたくない。
(必要となった時だけ生成、いらなくなったら破棄 という風にしたい)

状態遷移するごとにメモリリークが発生するようなプログラムは、
人事の方も「これはひどい!」と判断するでしょう。

うー困った。

【追記】
メモリリークする作品を提出するわけには行かないので、
とりあえずnewなしのものを作って見ます。
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

No title

ESCが押されたら、メモリを解放してから終了…でいいのでは?

No title

これで良いのか分かりませんが、
ひとまずグローバルなクラスを作っておき、
PostQuitMessage(0);の前に、deleteする処理を追加してみました。
(今までスレッドの中でnewしていたので、アクセス出来なかった)

あと、メモリリーク以外にもどうやら問題があるみたいです。
しばらく遊んでみたところ、
"ヒープ領域が破壊されています"というエラーが出て強制終了したりしました。

純粋仮想関数や抽象クラスやSTLコンテナなど、
まだ慣れていない機能を使ったからだと思うのですが、今のところ把握できておらず。

現在、書籍などで調べながら対処しているところですv-293
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。