如何:使用调试堆
本主题适用于:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
学习版 |
仅限本机 |
||||
专业版、高级专业版和旗舰版 |
仅限本机 |
对于堆函数(例如 malloc、free、calloc、realloc、new 和 delete)的所有调用均解析为这些函数在调试堆中运行的调试版本。 当释放内存块时,调试堆自动检查已分配区域两侧的缓冲区的完整性,如果发生覆盖,将发出错误报告。
使用调试堆
- 用 C 运行库的调试版本链接应用程序的调试版本。
更改一个或多个 _crtDbgFlag 位域并创建标志的新状态
在 newFlag 参数设置为 _CRTDBG_REPORT_FLAG 的情况下调用 _CrtSetDbgFlag(以获取当前的 _crtDbgFlag 状态),并在一个临时变量中存储返回值。
通过对带相应位屏蔽的临时变量(在应用程序代码中由清单常数显示)进行 OR 运算(按位|符号)来打开任何位。
通过对带有相应位屏蔽的 NOT(按位 ~ 符号)的变量进行 AND(按位 & 符号)运算关闭其他位。
在 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 );