如何:使用调试堆

本主题适用于:

版本

Visual Basic

C#

F#

C++

Web Developer

学习版

主题不适用 主题不适用 主题不适用

仅限本机

主题不适用

专业版、高级专业版和旗舰版

主题不适用 主题不适用 主题不适用

仅限本机

主题不适用

对于堆函数(例如 malloc、free、callocrealloc、new 和 delete)的所有调用均解析为这些函数在调试堆中运行的调试版本。 当释放内存块时,调试堆自动检查已分配区域两侧的缓冲区的完整性,如果发生覆盖,将发出错误报告。

使用调试堆

  • 用 C 运行库的调试版本链接应用程序的调试版本。

更改一个或多个 _crtDbgFlag 位域并创建标志的新状态

  1. 在 newFlag 参数设置为 _CRTDBG_REPORT_FLAG 的情况下调用 _CrtSetDbgFlag(以获取当前的 _crtDbgFlag 状态),并在一个临时变量中存储返回值。

  2. 通过对带相应位屏蔽的临时变量(在应用程序代码中由清单常数显示)进行 OR 运算(按位|符号)来打开任何位。

  3. 通过对带有相应位屏蔽的 NOT(按位 ~ 符号)的变量进行 AND(按位 & 符号)运算关闭其他位。

  4. 在 newFlag 参数设置为临时变量中存储的值的情况下调用 _CrtSetDbgFlag,以创建 _crtDbgFlag 的新状态。

示例

例如,下列代码行打开自动泄漏检测,关闭检查 _CRT_BLOCK 类型的块:

// Get current flag
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );

// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;

// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;

// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );

请参见

其他资源

CRT 调试堆