在我的wxWidgets应用程序中,在调试模式下运行时,我在Visual Studio 2010的输出中收到了此消息。应用程序运行正常,我在关闭它之后才看到它。
检测到内存泄漏!
转储对象 - >
{9554}正常块位于0x003CDCC0,44个字节长。 数据:<e n d> 20 C1 65 01 01 00 00 00 6E 00 00 00 9C CE 64 01
{9553}正常块在0x003CDB58,长度为8个字节。
数据:<D e <> 44 BD 65 01 C0 DC 3C 00 {9552}正常阻塞位于0x003CDC50,长度为48个字节。
日期:<和> A0 95 65 01 01 00 00 00 19 00 00 00 19 00 00 00
对象转储完成。
在我的程序中,我没有明确地分配内存,但是wxWidgets框架是。我第一次收到这样的消息,并且不知道它的确切原因。
我怎样才能摆脱这种内存泄漏?
您只需在主函数的开头添加以下行。添加此标志,Visual Studio将在创建内存泄漏的行中断。
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetBreakAlloc(9554);
_CrtSetBreakAlloc(9553);
_CrtSetBreakAlloc(9552);
确保您具有正确的对象普通块地址,因为它们可能会更改并确保您在_DEBUG上进行编译。
也许框架仍然分配了一些静态实例。尝试使用像“devpartner”这样的探查器来解决它。
This wiki建议在所有其他标头包含的内容之后将以下内容添加到您拥有的每个源文件中:
#ifdef __WXMSW__
#include <wx/msw/msvcrt.h> // redefines the new() operator
#endif
这将导致程序结束时报告泄漏。
更具体地说,确保在使用->Destroy()
创建的所有对象上调用new
(除了顶窗)。
如果vs报告的泄漏位置每次都可以设置databreakpoint以查看何时更改此内存并希望找出谁正在分配此内存