c++ - 当内存分配数不总是相同时如何检测内存泄漏?

标签 c++ memory memory-leaks dynamic-memory-allocation

我的程序出现了这样的内存泄漏(55 字节)。 我正在使用 C++、MFC、Visual Studio 2010。

检测到内存泄漏! {13497} 0x0E44C248 处的正常 block ,55 字节长。 数据:44 3A 5C 46 44 41 53....

问题是,内存分配号“13497”并不总是相同的。如果我再次运行程序,它总是不同的数字。 我想找到我在退出前没有释放内存的地方,用_crtBreakAlloc,但似乎不可能在内存分配号上中断。 我也使用了 _CrtSetDbgFlag 和 _CrtDumpMemoryLeaks,但效果也不佳。

在这种情况下有什么方法可以检测到内存泄漏吗?

谢谢。

最佳答案

您可以使用像 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分才能发表评论。

关于c++ - 当内存分配数不总是相同时如何检测内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666714/

相关文章:

c++ - 是什么导致 "Undefined symbols for architecture x86_64"构建错误?

c++ - Visual Studio 2015 "Hello World"多个错误

c - else 语句的段错误

entity-framework-4 - Entity Framework - 已处置的 ObjectContext 未由垃圾收集

c++ - 即使我不包含必要的 header ,程序也会编译?

c++ - 根据非类型参数值推导出类型列表

c++ - 指针转换是否保持对齐属性?

r - 合并真的不是那么大的data.tables会立即导致R被杀死

c# - 数据库连接导致 CrystalReports ReportDocument 内存泄漏

ios - UIImageView内存泄漏