我使用Visual 2017年写一个MFC应用程序应用程序退出时在调试模式下,我得到这个:检测内存泄漏
检测内存泄漏!转储对象 - > {74}正常块在 0x00000230E49A7000,长度为16个字节。数据:< 0 0> 30 00 97 E4 30 02 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吗? – drescherjm
是的,它总是74.我发现内存泄漏发生在我导入到我的项目中的非MFC代码中。虽然,我猜_CrtSetDbgFlag不会在此代码执行之前调用。 –
我将这些行放在外部代码主类的构造函数中,并且调试器在堆栈(而不是堆)上分配std :: vector时停止。很奇怪...... –