答案 0 :(得分:0)
唯一的解决方案是自己覆盖内存分配运算符(new
和delete
);这些运算符可以将任何内存分配和释放记录到某种日志中,因此您稍后将对此日志进行分析。您可以在此处查看详细信息:Overriding memory allocation method standard libraries use?
但是,这将极大地影响速度。
我不确定是否也可以覆盖free
和malloc
函数。您可以使用#define
替换自己代码中的标准free
和malloc
,但我不确定您的库依赖项是否可行,因此您的内存分配/释放日志可能会遗漏数据由库依赖项分配。当然,您可以使用自己的内存管理功能重建所有库。
答案 1 :(得分:0)
我尝试使用MFC内存泄漏工具,但它们仅在Debug中起作用。我曾尝试使用deleaker之类的各种工具应用程序,但价格昂贵。 GitHub上也有免费工具,但是我尝试过的工具已经过时(代码未维护),这花了很多时间进行配置和设置,而且不值得。
信不信由你,我发现最好的“工具”是通过迭代编译隔离程序组件。只需遍历您的代码,并从大到小禁用/注释代码。换句话说,您注释掉所有代码,没有泄漏等。重新编译并让泄漏转储告诉您是否存在泄漏。您可以执行此操作,直到错误代码跳出来。它出奇地有效。有时候最简单的解决方案是最好的。
我假设您有一种在“发布”模式下检测泄漏的方法,因此这种方法也可以适用。我不记得Release MFC是否具有泄漏转储。也许其他人对此一无所知。