检测到内存泄漏
Detected memory leaks
在我的wxWidgets应用程序中,在调试模式下运行时,我在Visual Studio 2010的输出中得到了这个消息。应用程序运行正常,我只是在关闭它之后才看到这个。
检测到内存泄漏!
转储对象->
{9554}正常块位于0x003CDCC0,长44字节。
数据:& lt;e n d> 20 C1 65 01 01 00 00 00 6E 00 00 00 9C CE 64 01{9553}正常块在0x003CDB58, 8字节长。
数据:& lt;D & e;> 44 bd65 01 C0 DC 3C 00
{9552}正常块在0x003CDC50, 48字节长。数据:& lt;e> A0 95 65 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
对象转储完成。
在我的程序中,我没有显式分配内存,但是wxWidgets框架是。我第一次收到这样的消息,不知道确切的原因。
我怎样才能摆脱这个内存泄漏?
您只需要在main函数的开头添加以下几行代码。添加此标志后,Visual Studio将在产生内存泄漏的行中断。
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetBreakAlloc(9554);
_CrtSetBreakAlloc(9553);
_CrtSetBreakAlloc(9552);
确保你有正确的对象正常块地址,因为它们可能会改变,并确保你在_DEBUG上编译。
请参见:_CrtSetDbgFlag和_CrtSetBreakAlloc。
-
永远不要"假设"你的代码是内存防泄漏的。除非您是编程高手之一,否则没有人可以避免可能的编写内存泄漏。
-
你可以使用像bounds checker (From Microfocus)这样的工具来帮助识别内存泄漏,因为它会给你一个调用堆栈。从调试CRT获得的内存泄漏报告只是告诉您在特定地址发生了内存泄漏。像边界检查器这样的产品将为内存泄漏提供调用堆栈,以及许多其他好东西。市场上还有其他内存泄漏工具,但我不会在这里列出它们。
-
如果你确定内存泄漏是由于'wxWidgets',那么也许你应该通知该库的作者,也许他们会修复它(与合适的复制步骤)。
也许某些类型的静态实例仍然由框架分配。尝试使用像"devpartner"这样的分析器来解决这个问题。
本wiki建议将以下内容添加到您拥有的每个源文件中,在所有其他头文件包含之后:
#ifdef __WXMSW__
#include <wx/msw/msvcrt.h> // redefines the new() operator
#endif
这将导致程序结束时报告泄漏。
更具体地说,确保在使用new
创建的所有对象上调用->Destroy()
(可能除了您的顶部窗口)。
如果vs报告的泄漏位置每次都是相同的,您可以设置一个数据断点来查看此内存何时被更改,并希望找出谁在分配此内存
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存