在没有第三方工具/项目的情况下,在MFC C ++发布版本中查找内存泄漏

时间:2014-12-05 08:44:42

标签: c++ memory-leaks mfc release

我有一个简单的问题: 如何跟踪VS 2010 MFC C ++项目中的内存泄漏?

对于调试版本,有可能描述here

发布版本的解决方案是什么,而不必使用第三方工具/项目?

2 个答案:

答案 0 :(得分:0)

唯一的解决方案是自己覆盖内存分配运算符(newdelete);这些运算符可以将任何内存分配和释放记录到某种日志中,因此您稍后将对此日志进行分析。您可以在此处查看详细信息:Overriding memory allocation method standard libraries use? 但是,这将极大地影响速度。 我不确定是否也可以覆盖freemalloc函数。您可以使用#define替换自己代码中的标准freemalloc,但我不确定您的库依赖项是否可行,因此您的内存分配/释放日志可能会遗漏数据由库依赖项分配。当然,您可以使用自己的内存管理功能重建所有库。

答案 1 :(得分:0)

我尝试使用MFC内存泄漏工具,但它们仅在Debug中起作用。我曾尝试使用deleaker之类的各种工具应用程序,但价格昂贵。 GitHub上也有免费工具,但是我尝试过的工具已经过时(代码未维护),这花了很多时间进行配置和设置,而且不值得。

信不信由你,我发现最好的“工具”是通过迭代编译隔离程序组件。只需遍历您的代码,并从大到小禁用/注释代码。换句话说,您注释掉所有代码,没有泄漏等。重新编译并让泄漏转储告诉您是否存在泄漏。您可以执行此操作,直到错误代码跳出来。它出奇地有效。有时候最简单的解决方案是最好的。

我假设您有一种在“发布”模式下检测泄漏的方法,因此这种方法也可以适用。我不记得Release MFC是否具有泄漏转储。也许其他人对此一无所知。