Bagikan melalui


Debug Versions of Heap Allocation Functions

This topic applies to:

Edition

Visual Basic

C#

C++

Web Developer

Express

Topic does not apply Topic does not apply

Native only

Topic does not apply

Standard

Topic does not apply Topic does not apply

Native only

Topic does not apply

Pro and Team

Topic does not apply Topic does not apply

Native only

Topic does not apply

Table legend:

Topic applies

Applies

Topic does not apply

Does not apply

Topic applies but command hidden by default

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.

See Also

Other Resources

CRT Debugging Techniques