我正在尝试使用VS2019定位我的C++程序中的内存泄漏。 例如,“调试-输出”窗口中的输出为:
{3880} normal block at 0x00D66730, 8 bytes long.
Data: < 5 > D8 35 0F 05 00 00 00 00
所以内存分配号是3880。 为了定位这个漏洞,我故意使用全局变量实现了一个内存漏洞:
#include "stdafx.h"
int* foo = DEBUG_NEW int;
这导致了一条附加消息:
C:\Main.cpp(5) : {3944} normal block at 0x00D24BF8, 4 bytes long.
Data: < > CD CD CD CD
因此,存储器分配数3880低于故意存储器泄漏的存储器分配数(3944)。 这些信息是否允许我得出这样的结论:内存泄漏(内存分配号为3880)是由于一个全局变量造成的? 还是有可能,它是由于DLL文件(或DLL文件中的全局变量)导致的泄漏?
您可以添加监视条目ucrtbased.dll!_crtbreakalloc
。 它的初始值是-1。 但您可以将其设置为3880以请求停止该分配。
但是,在启动过程中进行分配时,要达到这一点有点困难。
>
必须在heap_alloc_dbg_internal
处设置函数断点。
运行你的程序。 它会停在那个函数上。
将ucrtbased.dll!_crtbreakalloc
的值更改为3880(您现在应该在“监视”窗口中具有该值)。
禁用heap_alloc_dbg_internal
处的断点。
继续节目。 观察您的程序在请求的分配处停止。