gpt4 book ai didi

delphi - 为什么 Delphi 的内存管理器在关闭时报告错误的内存泄漏?

转载 作者:行者123 更新时间:2023-12-03 15:24:32 26 4
gpt4 key购买 nike

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

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

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

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

有人见过这样的事情吗?知道可能是什么原因造成的吗?我尽可能确定这些对象没有泄漏,那么到底发生了什么?

最佳答案

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

关于delphi - 为什么 Delphi 的内存管理器在关闭时报告错误的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com