This tip helps to utilize the contex operator :
{,,msvcrxxd.dll}_crtBreakAlloc
Memory leaks in VC++ can be detected using debug heap function. To enable these, we should use:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
And to track memory (leaks) allocated via '
new
', we can use:
#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
Now at the end of
main()
or at the point of interest in the code, we should call
_CrtDumpMemoryLeaks()
;
void main()
{
_CrtDumpMemoryLeaks();
}
The leaks, if any, are shown in the Output window as:
C:\Projects\Sample\main.cpp(10) : {30} normal block at 0x00780E80, 64 bytes long.
Data: <> CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
We can utilize the memory allocation number (30 in the above example) to identify the code which caused the leak. To do this, we can use
_crtBreakAlloc
or the context operator in the watch window:
{,,msvcrxxd.dll}_crtBreakAlloc
Here xx should be replaced by the version of Visual Studio.
90 for VS2008
80 for VS2005 ...
In the watch window, the value of this wil be
-1
initially and we can then set it to our memory allocation number to break at the appropiate code block.
To consolidate, all we have to do is this:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
void main()
{
int* i = new int;
_CrtDumpMemoryLeaks();
}
Hope now it is usable in the real world.