Skip to main content

C++ tricks, #5: Breaking on memory allocations with VC

A little known feature is breaking on a specific memory allocation without recompiling your app. Let's assume you've run your code with _CrtDumpMemoryLeaks (); and you got something like

Detected memory leaks!
Dumping objects ->
{12213} normal block at 0x004DA780, 4 bytes long.
 Data: <4x  > 34 78 B5 00
Object dump complete.

Now, you want to track that down. Nothing simpler than that! Fire up your program in the debugger (I suggest running "Debug", "Step into" to stop right at the first instruction), open your immediate window and enter:

{,,msvcr80d.dll}_crtBreakAlloc = 12213

This will work if you are linking against the multi-threaded DLLs (default with VC8), otherwise you can enter:

_crtBreakAlloc = 12213

Continue and you'll get a "buggy_app.exe has triggered a breakpoint" as soon as you hit this allocation, and unless you've killed your stack you should see the location in the call stack.