我的程序中出现了内存泄漏(55字节),就像这样。 我正在使用C ++,MFC,Visual Studio 2010。
检测到内存泄漏! {13497}正常阻塞位于0x0E44C248,长度为55个字节。 资料:44 3A 5C 46 44 41 53 ....
问题是,内存分配号“13497”并不总是相同。如果我再次运行程序,它总是不同的数字。 我想在退出之前用_crtBreakAlloc找到我没有释放内存的地方,但似乎无法打破内存分配号。 我也使用了_CrtSetDbgFlag和_CrtDumpMemoryLeaks,但它也运行不正常。在这种情况下有没有办法检测内存泄漏?
谢谢。
答案 0 :(得分:2)
您可以使用像cppcheck这样的静态分析器,或者如Joe所说,重新映射运算符new
。
我开发了一些你可以使用的内存泄漏工具:
https://github.com/check69/Utils/blob/master/leaks.cpp
https://github.com/check69/Utils/blob/master/leaks.h
有一些visual studio指令可以在控制台输出中获取泄漏,以便更轻松地进行调试。
PS:我会把它作为评论发表在joe post中,但我需要50分来发表评论。答案 1 :(得分:1)
有几种方法可以攻击它。
此代码重新映射operator new
#ifdef _DEBUG
# define _CRTDBG_MAP_ALLOC
# include <crtdbg.h>
# include <new>
# include <memory>
# define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
# define new DEBUG_NEW
#endif
答案 2 :(得分:0)
您好,感谢您的回答..
通过使用&#34; Visual Leak detector&#34;我很容易找到泄漏位置。来自https://vld.codeplex.com/ 我强烈建议那些有同样问题的人。 :)你可以下载它并把它放在你的项目中。