使用_crtBreakAlloc查找内存泄漏 – 标识符“_crtBreakAlloc”未识别

我试图在Watch窗口中使用_crtBreakAlloc , 如此链接中所建议的那样,但是值行显示“identifier”_crtBreakAlloc“未识别”并且它根本不起作用。

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

代码示例:

 #define _CRTDBG_MAP_ALLOC #include  #include  #include  int main() { int *arr = (int*)malloc(10 * sizeof(int)); //breakpoint here free(arr); return 0; } 

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

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

 _crtBreakAlloc = 18; 

如果您使用的是CRT的multithreading版本,请在监视窗口(列名称)中输入以下内容:

 (int*){,,ucrtbased.dll}_crtBreakAlloc 

然后按Enter键并将值-1更改为导致用户定义断点的新分配编号。

在此处输入图像描述

似乎对于Visual Studio 2015,有必要使用两个下划线:

 (int*){,,ucrtbased.dll}__crtBreakAlloc