私自身の経験から、メモリ リークの出力が失われるのは、さまざまな理由が原因である可能性があります。最も重要なものを要約すると:
ソースコードの変更:
- メモリ リーク レポートを無効にする (つまり、_CrtSetDbgFlagを使用)
- カスタム レポート フックをインストールします ( _CrtSetReportHook、_CrtSetReportHook2を参照) 。
- 出力をファイルにリダイレクトします ( CrtSetReportModeを参照)。
- アプリケーションの終了時にサイレント「クラッシュ」につながるソースコードの変更 - アプリケーションは、メモリリークが報告されるポイントに到達する前に、問題を示すことなくサイレントに終了します (ありそうもないことですが、これは私が一度経験したように見えるかもしれません)。
開発環境の設定により、出力が別のウィンドウにリダイレクトされます。ツール\オプション\デバッグ\全般\すべての出力ウィンドウのテキストをイミディエイト ウィンドウ (下から 5 番目) にリダイレクトします。おそらく他の可能性がここに存在します。
ポイント 2 を除外する 1 つの可能性は、(main.cpp) の行で単純なコンソール アプリケーションを作成することだと思います。
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int _tmain(int argc, _TCHAR* argv[])
{
int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(nOldState | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int *pInt = new int[100];
return 0;
}
このアプリケーションを実行するとメモリ リークが正しく出力される場合、残念ながらケース 1 に該当する可能性があります。
もちろん、出力がなくなる可能性がある明白な理由を除外しました (それらのいくつかは既にコメントで言及されています)。