4

我在关机时收到内存泄漏消息,说我正在泄漏某个对象的 3 个。不过,这有两个问题。

  1. 它只是间歇性地发生。我可以运行我的程序,完成完全相同的一系列步骤,(打开一个数据文件,显示它,然后再次关闭),有时会显示消息,有时不会。沿着这些代码路径没有调用 random() 或其他“非确定性”逻辑。

  2. 代码审查说报告的内存泄漏是不可能的;该对象仅在某个类中创建,并且在该类的析构函数中正确释放。(并且我实例化了超过三个父类的对象。并且在清理过程中不会引发异常。)

将跟踪输出添加到此类的构造函数和析构函数表明创建的每个对象都被销毁,即使内存管理器报告其他情况也是如此。所以我只能得出结论,这是一个误报。但是,将“RegisterUnexpectedMemoryLeak(self)”添加到构造函数会使消息消失。

有没有人见过这样的事情?知道可能是什么原因造成的吗?我几乎可以肯定物体没有泄漏,那么发生了什么?

4

2 回答 2

7

使用新的FastMM,在链接器选项中启用映射文件构建,定义条件符号 FullDebugMode 并重建程序。然后完成你的步骤。在程序终止时,它应该生成文件 programname__MemoryManager__EventLog.txt,其中包含有关在程序中构造泄漏对象的位置的信息。

于 2008-11-03T03:52:51.220 回答
0

创建一个您确定在同一个函数中的内存泄漏,然后观察内存管理器报告的内容。

于 2008-11-03T03:33:14.707 回答