Export (0) Print
Expand All

The Debug Heap from C++

The Debug versions of the C run-time library contain Debug versions of the C++ new and delete operators. If your C++ code defines _CRTDBG_MAP_ALLOC, all instances of new are mapped to the Debug version, which records source file and line number information.

If you want to use the _CLIENT_BLOCK allocation type, do not define _CRTDBG_MAP_ALLOC. Instead, you must call the Debug version of the new operator directly or create macros that replace the new operator in debug mode, as shown in the following example:

/* MyDbgNew.h
 Defines global operator new to allocate from
 client blocks
*/

#ifdef _DEBUG
   #define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
   #define DEBUG_CLIENTBLOCK
#endif // _DEBUG


/* MyApp.cpp
   Compile options needed: /Zi /D_DEBUG /MLd
 *            or use a
 *      Default Workspace for a Console Application to
 *      build a Debug version
*/

#include "crtdbg.h"
#include "mydbgnew.h"

#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif

int main( )   {
   char *p1;
   p1 =  new char[40];
   _CrtMemDumpAllObjectsSince( NULL );
 }

The Debug version of the delete operator works with all block types and requires no changes in your program when you compile a Release version.

See Also

The CRT Debug Heap

Show:
© 2014 Microsoft