首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在给定内存分配号的全局中查找内存泄漏

在给定内存分配号的全局中查找内存泄漏
EN

Stack Overflow用户
提问于 2020-07-15 14:01:16
回答 1查看 253关注 0票数 0

我试图使用VS 2019年在我的c++程序中找到一个内存泄漏。例如,Debug-Output窗口中的输出:

代码语言:javascript
复制
{3880} normal block at 0x00D66730, 8 bytes long.
 Data: < 5      > D8 35 0F 05 00 00 00 00

所以内存分配号是3880。为了找到这个泄漏,我故意使用一个全局变量实现了一个内存泄漏:

代码语言:javascript
复制
#include "stdafx.h"
int* foo = DEBUG_NEW int;

这就产生了一个额外的信息:

代码语言:javascript
复制
C:\Main.cpp(5) : {3944} normal block at 0x00D24BF8, 4 bytes long.
 Data: <    > CD CD CD CD

因此,存储器分配号3880低于用于存储器泄漏(3944)的存储器分配号。这些信息允许我得出这样的结论:内存泄漏(内存分配号3880)是由于一个全局变量造成的吗?还是仍然有可能是由于DLL文件(或DLL文件中的全局变量)而导致泄漏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 14:55:50

您可以添加一个监视条目ucrtbased.dll!_crtBreakAlloc。它的初始值是-1。但是您可以将其设置为3880,以便在分配时请求停止。

不过,要想达到这一点,在启动期间进行分配是有点困难的。

您必须在ucrtbased.dll!heap_alloc_dbg_internal.上设置一个函数断点

  1. 运行您的程序。它将在该函数处停止。

  1. ucrtbased.dll!_crtBreakAlloc的值更改为3880 (您现在应该在监视窗口中拥有这个值)。

禁用heap_alloc_dbg_internal.上的断点

  1. 继续这个程序。观察您的程序在请求的分配时被停止。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62916695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档