Delphi 为什么德尔福';s内存管理器在关机时报告错误内存泄漏?

Delphi 为什么德尔福';s内存管理器在关机时报告错误内存泄漏?,delphi,memory-management,Delphi,Memory Management,我在关机时收到内存泄漏消息,说我泄漏了某个对象的3个内存。不过,这有两个问题 它只是间歇性地发生。我可以运行我的程序,执行完全相同的一系列步骤,(打开一个数据文件,显示它,然后再次关闭),有时消息会显示,有时则不会。这些代码路径中没有对random()或其他“非确定性”逻辑的调用 代码审查表明报告的内存泄漏是不可能的;该对象仅在某个类中创建,并在该类的析构函数中正确释放。(我实例化了父类的三个以上的对象,并且在清理过程中没有引发异常。) 向该类的构造函数和析构函数添加跟踪输出表明,创建的每个对象

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

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

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

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


    以前有人见过这样的东西吗?知道是什么引起的吗?我尽可能确定对象没有泄漏,那么发生了什么呢?

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

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