【发布时间】:2018-01-17 22:43:43
【问题描述】:
我正在使用 Visual 2017 编写 MFC 应用程序,当应用程序以调试模式退出时,我得到以下信息:
检测到内存泄漏!倾倒对象 -> {74} 普通块 0x00000230E49A7000,16 字节长。数据: 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 个内存分配号。我可以重载哪个方法以确保首先被调用?
【问题讨论】:
-
总是74吗?
-
是的,它总是 74。我发现内存泄漏发生在我导入项目的非 MFC 代码中。不过,我猜在此代码执行之前不会调用 _CrtSetDbgFlag。
-
我将这些行放在外部代码主类的构造函数中,当在堆栈上(而不是在堆上)分配 std::vector 时,调试器停止。很奇怪……
-
std::vector 在栈上记住向量可能在栈上,但它是从堆中分配的。
-
可能泄漏报告是误报。
标签: c++ memory-leaks mfc