これを行うにはいくつかの方法があります (Microsoft Visual Studio に付属の CRT に固有です)。
1 つの方法は_CrtMemCheckpoint()
、関心のある呼び出しの前後で関数を使用し、その違いを と比較すること_CrtMemDifference()
です。
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint (&s1);
foo(); // Memory allocations take place here
_CrtMemCheckpoint (&s2);
if (_CrtMemDifference(&s3, &s1, &s2)) // Returns true if there's a difference
_CrtMemDumpStatistics (&s3);
を使用して、割り当てられたすべてのブロックを列挙することもできます。また_CrtDoForAllClientObjects()
、Visual C++ CRT のデバッグ ルーチンを使用して他のいくつかの方法を使用することもできます。
ノート:
- これらはすべて
<crtdbg.h>
ヘッダーにあります。
- これらは明らかに Windows でのみ動作し、VC でコンパイルする場合にのみ機能します。
- CRT デバッグといくつかのフラグなどを設定する必要があります。
- これらはややトリッキーな機能です。MSDN の関連部分を注意深く読んでください。
- これらはデバッグ モードでのみ機能します (つまり、デバッグ CRT と
_DEBUG
定義されたマクロとのリンク)。