FastMM突然报告Graphics32中的内存泄漏

时间:2011-01-07 16:25:19

标签: delphi fastmm

我有一个空项目(它只包含一个表单)。如果我将这一行添加到项目'USES GR32_Image;'并运行应用程序,FastMM显示程序中的泄漏。 FastMM设置为完全调试。我的程序中没有代码 - 除了Delphi IDE生成的代码和'使用gr32'行之外。

报告毫无意义。 这是完整的日志:http://pastebin.com/Yhev3rJ2
以下是源代码:http://pastebin.com/VjRrRiS8

之前我使用过Graphics32单元,我从来没有遇到过问题。为什么我有此泄漏以及为什么FastMM无法生成正确的报告?

3 个答案:

答案 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)

这两个问题都解决了。

  1. 我记得前段时间我在GR32.inc中添加了这行代码: {$ D-} 我删除了该行,重新编译了VCL并且它工作正常。完全是我的错。

  2. 请参阅Jeroen Pluimers帖子,该帖子回答了“为什么FastMM无法生成正确的报告?”


  3. 感谢大家参与。