我试图使用VS 2019年在我的c++程序中找到一个内存泄漏。例如,Debug-Output窗口中的输出:
{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文件中的全局变量)而导致泄漏?
发布于 2020-07-15 14:55:50
您可以添加一个监视条目ucrtbased.dll!_crtBreakAlloc。它的初始值是-1。但是您可以将其设置为3880,以便在分配时请求停止。
不过,要想达到这一点,在启动期间进行分配是有点困难的。
您必须在ucrtbased.dll!heap_alloc_dbg_internal.上设置一个函数断点
ucrtbased.dll!_crtBreakAlloc的值更改为3880 (您现在应该在监视窗口中拥有这个值)。禁用heap_alloc_dbg_internal.上的断点
https://stackoverflow.com/questions/62916695
复制相似问题