<crtdbg.h>
ヘッダー ファイルから:
#ifdef _CRTDBG_MAP_ALLOC
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
// etc...
#endif
再定義により、探しているファイルと行番号を持つ別のバージョンの malloc が呼び出されることに注意してください。明らかに、これを機能させるには、_CRTDBG_MAP_ALLOC を #define し、crtdb.h を #include する必要があります。これは、すべてのコードがこれらのマクロを有効にしてコンパイルされることを合理的に確信できるように、プリコンパイル済みヘッダー ファイルで行うのが最適です。
それでも、この情報が得られることを保証するものではありません。プロジェクトは、それなしでコンパイルされた .lib を使用している可能性があります。もう 1 つの障害モードは、リーク レポートを生成する直前にアンロードされる可能性のある DLL です。その DLL のファイルと行情報もアンロードされます。
この種のトラブルメーカーを診断するためのフォールバックがあります。リーク レポートにはブロック番号で始まるリークの行があり、中かっこ内の先頭に示されています。そのブロック番号が実行間で安定している限り、割り当てが行われたときにデバッガーを強制的に中断できます。このコードをメイン メソッドまたはコード内の早期に実行されるポイントに配置します。
_crtBreakAlloc = 42; // Change the number