我有一个空项目(它只包含一个表单)。如果我将这一行添加到项目'USES GR32_Image;'并运行应用程序,FastMM显示程序中的泄漏。 FastMM设置为完全调试。我的程序中没有代码 - 除了Delphi IDE生成的代码和'使用gr32'行之外。
报告毫无意义。
这是完整的日志:http://pastebin.com/Yhev3rJ2
以下是源代码:http://pastebin.com/VjRrRiS8
之前我使用过Graphics32单元,我从来没有遇到过问题。为什么我有此泄漏以及为什么FastMM无法生成正确的报告?
答案 0 :(得分:8)
如果您使用FastMM4的完整版本,请启用FullDebugMode。同时打开详细的地图生成以帮助堆栈跟踪。检查该单元的单元初始化部分,看看是否有任何问题。
答案 1 :(得分:3)
使用完整的调试信息编译您的应用程序,然后在链接器选项中,确保您的调试信息位于.EXE和/或.MAP文件中。
然后使用FullDebugMode运行FastMM,并在您的问题中复制/粘贴生成的.TXT文件。
有关更多提示,另请参阅this post。
修改强>
好的第一步是在.TXT文件上执行类似的操作:
find "The allocation number is" < fastmmlog.txt | sort /R
这为您提供了第一个分配编号,在您的情况下为281
。
然后,在.TXT中搜索分配编号:
--------------------------------2011/1/7 23:31:03--------------------------------
A memory block has been leaked. The size is: 20
This block was allocated by thread 0x1540, and the stack trace (return addresses) at the time was:
402D80 [System][System][@GetMem]
40388F [System][System][TObject.NewInstance]
403C12 [System][System][@ClassCreate]
4038C4 [System][System][TObject.Create]
403C12 [System][System][@ClassCreate]
403C6A [System][System][@AfterConstruction]
457922 [GR32_Bindings][GR32_Bindings][NewRegistry]
45807E [GR32_LowLevel][GR32_LowLevel][RegisterBindings]
458152 [GR32_LowLevel][GR32_LowLevel][GR32_LowLevel]
404373 [System][System][InitUnits]
4043DB [System][System][@StartExe]
The block is currently used for an object of class: TList
The allocation number is: 281
在这里你可以看到NewRegistry
涉及你的泄密
从那里,您可以开始调试以找出它泄漏的原因。
- 的Jeroen
答案 2 :(得分:0)
这两个问题都解决了。
我记得前段时间我在GR32.inc中添加了这行代码: {$ D-} 我删除了该行,重新编译了VCL并且它工作正常。完全是我的错。
请参阅Jeroen Pluimers帖子,该帖子回答了“为什么FastMM无法生成正确的报告?”
感谢大家参与。