【发布时间】:2011-03-24 17:50:59
【问题描述】:
我正在使用 Delphi XE,并编写一个使用 RemObjects SDK 进行通信的应用程序(如果可能相关)。我启用了 FastMM 调试,有时(并非总是)当我关闭它时会发出有关单个“意外内存泄漏”的警告。 “发生了意外的内存泄漏。意外的小块泄漏是:117-124 字节:UnicodeString x 1”。偶尔,我会收到 x2 报告。
现在,我的理解是字符串是引用计数的,并且由于没有其他对象会导致泄漏,那么可能导致这种情况发生的情况是什么?在this StackOverflow question 中,人们找不到泄密的方法。
如果没有明显的办法,那我就下载最新的FastMM源码(XE源码好像不包含)。
[解决后编辑] 找到此问题的解决方案是安装 FastMM 源,并启用 FullDebugMode 以获取堆栈跟踪。
【问题讨论】:
-
我发现 AQTime 在查找内存泄漏方面比 Fast MM 完整调试模式更有用。正是由于 FastMM 报告此类泄漏的方式(首先告诉您有关字符串泄漏,而不是包含泄漏的字符串内存的对象),我更喜欢 AQTime。
-
@Warren 没有 FastMM 也告诉你拥有该字符串的对象。那是我的回忆,但我已经很久没有内存泄漏了!
-
@jachguate 问题就在问号之前。 @David,没有提到其他项目。当我确实泄漏了一个类时,我得到了类类型和它包含的任何字符串。
-
按照我在回答中所说的方式进行操作,您也会获得堆栈跟踪。我不记得设置了,但我相信你可以从 FastMM 的文档中解决。