Debug versions of heap allocation functions
The C runtime (CRT) library contains special Debug versions of the heap allocation functions. These functions have the same names as the Release versions with
_dbg appended to them. This article describes the differences between the Release version of a CRT function and the
_dbg version, using
_malloc_dbg as examples.
Behavior in debug builds
_DEBUG is defined, the CRT maps all
malloc calls to
_malloc_dbg. Therefore, you don't need to rewrite your code using
_malloc_dbg instead of
malloc to receive the benefits while debugging.
You might want to call
_malloc_dbg explicitly, however. Calling
_malloc_dbg explicitly has some added benefits:
Storing the source file and line number where the allocation request occurred.
If you don't want to convert your
malloc calls to
_malloc_dbg, you can obtain the source file information by defining
_CRTDBG_MAP_ALLOC, which causes the preprocessor to directly map all calls to
_malloc_dbg instead of relying on a wrapper around
To track the separate types of allocations in client blocks, you must call
_malloc_dbg directly and set the
blockType parameter to
Behavior in non-debug builds
_DEBUG isn't defined, calls to
malloc aren't disturbed, calls to
_malloc_dbg are resolved to
malloc, the definition of
_CRTDBG_MAP_ALLOC is ignored, and source file information pertaining to the allocation request isn't provided. Because
malloc doesn't have a block type parameter, requests for
_CLIENT_BLOCK types are treated as standard allocations.
Submit and view feedback for