检测MFC应用程序中的内存泄漏

时间:2017-08-09 21:28:40

标签: c++ memory-leaks mfc

我正在使用Visual 2017编写MFC应用程序,当应用程序以调试模式退出时,我明白了:

  

检测到内存泄漏!转储对象 - > {74}正常阻挡在   0x00000230E49A7000,长度为16个字节。数据:< 0 0> 30 00 97   E4 30 02 00 00 00 00 00 00 00 00 00 00对象转储完成。

因此,为了知道导致泄漏的函数,我在stdafx.h中添加了这些行:

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

CWinApp :: InitInstance()中的这些行:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetBreakAlloc(74);

虽然,它没有用。我怀疑第74个内存分配号是在我的代码执行之前完成的。我可以重载哪种方法以确定首先被调用?

2 个答案:

答案 0 :(得分:2)

进入你的应用程序以开始调试(这是步骤,而不是运行,所以你将在程序运行之前在调试器中停止),然后将_crtBreakAlloc设置为你想要停止的分配(74)。然后跑,你应该在第74次分配中休息。 CRT Debug Heap Details包含有关此变量的信息。

This Microsoft support article还列出了在调试器中使用_crtBreakAlloc的说明。

答案 1 :(得分:1)

编写此代码

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

在每个实现(.CPP)文件的顶部,可以帮助您检测内存泄漏的来源。 另见:How to detect memory leaks in MFC