堆分配函数的“Debug”版本

C 运行库包含堆分配函数的特殊 " debug 版本。 这些函数的名称与 _dbg 的发布版本相同追加到它们。 本主题描述 CRT 函数的发行版本和 _dbg 版本之间的差异,使用 malloc_malloc_dbg 视为示例值。

_DEBUG 定义时, CRT 映射所有 malloc 调用 _malloc_dbg。 因此,不需要重写代码使用 _malloc_dbg 而不是 malloc 获取优点,在调试时。

但您可能希望显式调用 _malloc_dbg ,。 调用 _malloc_dbg 显式具有一些附加的好处:

  • 跟踪 _CLIENT_BLOCK 类型分配。

  • 存储源文件和行号分配请求发生位置的。

如果您不希望将您的 malloc 调用 _malloc_dbg,可以通过定义 _CRTDBG_MAP_ALLOC获取源文件信息,导致预处理器的所有调用直接映射到 malloc_malloc_dbg 而不是依赖于包装在 malloc附近。

若要跟踪分配客户端块中各种类型,您必须直接调用 _malloc_dbg 和设置 blockType 参数。 _CLIENT_BLOCK

未定义 _DEBUG 时,对 malloc 不会妨碍,不对 _malloc_dbg 将解析为 malloc_CRTDBG_MAP_ALLOC 的定义,将忽略,并且未提供有关分配请求的源文件信息。 由于 malloc 没有块类型的参数,需要 _CLIENT_BLOCK 类型作为标准分配。

请参见

其他资源

CRT 调试方法