Debug Versions of Heap Allocation Functions
This topic applies to:
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
Native only |
|||
Standard |
Native only |
|||
Pro and Team |
Native only |
Table legend:
Applies |
|
Does not apply |
|
Command or commands hidden by default. |
The C run-time 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 topic describes the differences between the Release version of a CRT function and the _dbg version, using malloc and _malloc_dbg as examples.
When _DEBUG is defined, the CRT maps all malloc calls to _malloc_dbg. Therefore, you do not 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:
Tracking _CLIENT_BLOCK type allocations.
Storing the source file and line number where the allocation request occurred.
If you do not 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 to _malloc_dbg instead of relying on a wrapper around malloc.
To track the separate types of allocations in client blocks, you must call _malloc_dbg directly and set the blockType parameter to _CLIENT_BLOCK.
When _DEBUG is not defined, calls to malloc are not 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 is not provided. Because malloc does not have a block type parameter, requests for _CLIENT_BLOCK types are treated as standard allocations.