
質問を見ていただいて有り難うございます。
当方、現在MFCのダイアログベースのプログラムを行なっているのですが、プログラム終了時にメモリリークが発生します。
今のところプログラムの動作自体に影響はないのですが、想定外の動作が起こると困るのでなんとかこのエラーを取り除きたいと考えています。
メモリリークの殆どは
_CrtSetBreakAlloc(Num);(指定した順序のメモリ割り当て時にブレークポイントを発生させる)
を利用して、メモリリークが起こっている部分のブレークポイントをチェックして消したのですが、どうしても残りのメモリリークが消えません。
残りのメモリリークは_CrtSetBreakAlloc(Num)で指定してもブレークポイントが出てきませんでした。
_CrtSetBreakAlloc(Num)は『ファイル名.cpp』のInitInstanceおよびコンストラクタで呼び出してみましたが、どちらも同じ結果になりました。
また、試しに『ファイル名Dlg』クラスを使用しない(ダイアログを開かないようにコメントアウト)ようにして終了しても同じ結果になりました。
_CrtSetBreakAlloc(Num)を設定する適切な位置や、このようなメモリリークが出る原因、解決方法などについてご存知の方がいらっしゃいましたら、お教えください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ちょっときつい書き方をしますが、楽して解決する方法はありません。
この「楽して」というのは、_CrtSetBreakAlloc(Num)に頼りきっていることです。
プロセス内で複数のスレッドを起動した場合、スレッドを終了せずにプロセスを終了すると、_CrtSetBreakAlloc(Num)では発見できないことがあります。
>解決方法などについて
究極的には、メモリを確保するnew/create系の処理に対して、メモリを解放するdelete/closeがすべて行われているかソースを虱潰しに確認していくしかありません。
あとは、タスクマネージャーのプロセスタブで「メモリ使用量」「スレッドの数」「ハンドルの数」などを監視しながら操作を行い、前述の値がどのように変化するかであたりをつけていくことです。
御回答有り難うございます。
>楽して解決する方法はありません。
確かに関数に頼りきりだったように思います。ご指摘有り難うございます。
>>解決方法などについて
(普通に使用する場合の)new/create系の処理については既にチェックが終わり…というか、
mydlg.DoModal();(mydlgはダイアログベースで自作した初期起動時のダイアログ)
をコメントアウトし、そもそもnew/create関係が呼び出されないようにしてもメモリリークが発生するので、途方にくれています。
タスクマネージャについては完全に盲点でした。プログラムを走らせて確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メモリが不足しています(VBA)
-
ExitProcessの関数コールについ...
-
VBAの配列サイズとメモリに関して
-
クイックソート
-
C言語で、メモリを解放しないで...
-
ファイルマッピング関数で失敗
-
エクセル キャッシュメモリー...
-
C,C++プログラムの強制終了時の...
-
ファミコンって8ビットしかない...
-
「ヒープサイズの設定」て何?
-
メモリのセグメント違反の解決...
-
使わなくなった変数に違う値を...
-
メモリを解放しないとどうなる?
-
メモリ不足
-
大容量のメモリ確保をスワップ...
-
「memcpy」と「strcpy」について
-
C言語:関数のメモリ上でのサイ...
-
組み込み系でのmallocについて
-
エクセルVBA 大容量CSVファイル...
-
ReadEventLogについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリ不足
-
メモリが不足しています(VBA)
-
「ヒープサイズの設定」て何?
-
メモリのセグメント違反の解決...
-
バッチファイルでの実行EXEのメ...
-
VB.netでUSBメモリの固有I...
-
EXCEL-VBAにてADOのレコードセ...
-
エクセルのメモリ使用状況/Appl...
-
「memcpy」と「strcpy」について
-
エクセルVBA 大容量CSVファイル...
-
ファイルマッピング関数で失敗
-
大容量のメモリ確保をスワップ...
-
GetAdapterInfoによりマックア...
-
C言語における再帰呼び出しの...
-
C++のCopyFileでメモリが増える
-
メモリを解放しないとどうなる?
-
クリスタルレポートでメモリ不...
-
closeとメモリの開放について
おすすめ情報