【发布时间】:2014-12-05 08:44:42
【问题描述】:
【问题讨论】:
标签: c++ memory-leaks mfc release
【问题讨论】:
标签: c++ memory-leaks mfc release
唯一的解决方案是自己重写内存分配运算符(new 和delete);这些运算符可以将任何内存分配和释放记录到某种日志中,因此您稍后将分析此日志。您可以在此处查看详细信息:Overriding memory allocation method standard libraries use?
但是,这会严重影响速度。
我不确定是否也可以覆盖 free 和 malloc 函数。您可以使用#define 替换您自己代码中的标准free 和malloc,但我不确定您的库依赖项是否可行,因此您的内存分配/释放日志可能会丢失由库依赖项分配的数据。当然,您可以使用自己的内存管理函数重新构建所有库。
【讨论】:
我曾尝试使用 MFC 内存泄漏工具,但它们只能在 Debug 中使用。我曾尝试使用各种工具应用程序,例如deleaker,但价格昂贵。 GitHub 上也有免费工具,但我尝试过的工具已经过时(代码未维护),这需要花费大量时间来配置和设置,而且不值得。
信不信由你,我发现的最好的“工具”是通过迭代编译实现程序组件隔离。只需浏览您的代码,然后从大到小禁用/注释掉代码。换句话说,您注释掉所有代码,没有泄漏等。重新编译并让泄漏转储告诉您是否存在泄漏。你可以这样做,直到错误的代码跳出来。它出奇地有效。有时最简单的解决方案是最好的。
我假设您有一种在发布模式下检测泄漏的方法,因此这种方法也适用于这种情况。我不记得 Release MFC 是否有泄漏转储。也许其他人会不自觉地知道这一点。
【讨论】: