使用_crtBreakAlloc查找内存泄漏 - 标识符"_crtBreakAlloc"未识别

Sun*_*awn 7 c memory-leaks crt

我正在尝试_crtBreakAlloc链接中建议的Watch窗口中使用,但值行显示'identifier'_crtBreakAlloc"未识别',它根本不起作用.

我究竟做错了什么?我顺便使用Visual Studio.

代码示例:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#include <malloc.h>


int main()
{
    int *arr = (int*)malloc(10 * sizeof(int)); //breakpoint here
    free(arr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我将_crtBreakAlloc写入Watch窗口的Name字段,并在遇到断点时按Enter键.

Cla*_*uin 7

如果未加载 ucrtbased.dll 符号,_crtBreakAlloc 将报告为未识别。我有这个问题,因为我不会自动加载我的符号。您可以进入您的模块列表并手动加载 ucrtbased.dll 的符号,然后 _crtBreakAlloc 应该显示并工作。


小智 4

_crtBreakAlloc是VS2015下的宏,被替换为调用返回int指针的函数。在监视窗口中跟踪变量似乎不是一个选项。
最好在您的(调试)代码中插入如下内容:

_crtBreakAlloc = 18;
Run Code Online (Sandbox Code Playgroud)