Delphi FastMM4如何读取MemoryManager_EventLog.txt?

Delphi FastMM4如何读取MemoryManager_EventLog.txt?,delphi,memory-management,memory-leaks,fastmm,Delphi,Memory Management,Memory Leaks,Fastmm,我已将FastMM4添加到我的项目中,用于检测内存泄漏 program MyProg; uses {$IFDEF DEBUG} FastMM4, {$ENDIF} ...other uses 在表单close FastMM4上生成一个MemoryManager\u EventLog.txt,其中包含所有泄漏块 这是一个例子: --------------------------------2019/6/19 9:49:25-----------------------

我已将FastMM4添加到我的项目中,用于检测内存泄漏

program MyProg;

uses
  {$IFDEF DEBUG}
  FastMM4,
  {$ENDIF}
  ...other uses
在表单close FastMM4上生成一个
MemoryManager\u EventLog.txt
,其中包含所有泄漏块

这是一个例子:

    --------------------------------2019/6/19 9:49:25--------------------------------
A memory block has been leaked. The size is: 20

This block was allocated by thread 0x558, and the stack trace (return addresses) at the time was:
4075D2 [System.pas][System][@GetMem$qqri][4614]
40ABAF [System.pas][System][TObject.NewInstance$qqrv][16452]
40B3D6 [System.pas][System][@ClassCreate$qqrpvzc][17790]
40AD20 [System.pas][System][TObject.$bctr$qqrv][16516]
F3BEF6 [NdST.pas][NdST][TFinder.$bctr$qqrp14System.TObject][1011]
11157D1 [SuperNode.pas][SuperNode][TSuperNode.$bctr$qqrp14System.TObject][993]
D1D840 [Network.pas][Network][TNetwork.Create$qqrv][968]
F3A70D [NdST.pas][NdST][TNdST.$bctr$qqrp14System.TObject][177]
F3B658 [NdST.pas][NdST][TNdSTCAP.$bctr$qqrp14System.TObject][652]
10A4CCA [Print.pas][Print][TPrint.CreateCollection$qqrv][4274]
10A2773 [Print.pas][Print][TPrint.CreateItem$qqrv][3031]

The block is currently used for an object of class: TList

The allocation number is: 53883

Current memory dump of 256 bytes starting at pointer address 7EBA5360:
48 FA 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7C C4 2D 79 00 00 00 00 E0 4B BA 7E
00 00 00 00 00 00 00 00 9C CD 41 00 00 00 00 00 7C D2 00 00 D2 75 40 00 AF AB 40 00 D6 B3 40 00
1A 72 11 01 29 AD 40 00 F8 57 11 01 40 D8 D1 00 0D A7 F3 00 58 B6 F3 00 CA 4C 0A 01 73 27 0A 01
58 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 AD 40 00 B8 AB 40 00 D1 57 11 01 F4 1B 0B 01 22 4D 0A 01 87 27 0A 01 0A 48 11 01 52 6E 11 01
H  ú  I  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  |  Ä  -  y  .  .  .  .  à  K  º  ~
.  .  .  .  .  .  .  .  œ  Í  A  .  .  .  .  .  |  Ò  .  .  Ò  u  @  .  ¯  «  @  .  Ö  ³  @  .
.  r  .  .  )  ­  @  .  ø  W  .  .  @  Ø  Ñ  .  .  §  ó  .  X  ¶  ó  .  Ê  L  .  .  s  '  .  .
X  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  x  ï  ï  †
<  -  .  .  À  F  ¼  ~  .  .  .  .  .  .  .  .  .  .  .  .  ‡  .  .  y  .  .  .  .  .  Q  º  ~
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  €  Ò  .  .  Ò  u  @  .  ¯  «  @  .  Ö  ³  @  .
   ­  @  .  ¸  «  @  .  Ñ  W  .  .  ô  .  .  .  "  M  .  .  ‡  '  .  .  .  H  .  .  R  n  .  .
-------------------------------------2019/6/19 9:49:25--------------------------------
内存块已泄漏。尺寸是:20
该块由线程0x558分配,当时的堆栈跟踪(返回地址)为:
4075D2[System.pas][System][@GetMem$qqri][4614]
40ABAF[System.pas][System][TObject.NewInstance$qqqrv][16452]
40B3D6[System.pas][System][@ClassCreate$qqrpvzc][17790]
40AD20[System.pas][System][TObject.$bctr$qqrv][16516]
F3BEF6[NdST.pas][NdST][TFinder.$bctr$qqrp14System.TObject][1011]
11157D1[SuperNode.pas][SuperNode][TSuperNode.$bctr$qqrp14System.TObject][993]
D1D840[Network.pas][Network][TNetwork.Create$qqqrv][968]
F3A70D[NdST.pas][NdST][TNdST.$bctr$qqrp14System.TObject][177]
F3B658[NdST.pas][NdST][TNdSTCAP.$bctr$qqrp14System.TObject][652]
10A4 CA[Print.pas][Print][TPrint.CreateCollection$qqrv][4274]
10A2773[Print.pas][Print][TPrint.CreateItem$qqrv][3031]
该块当前用于类为TList的对象
分配号码是:53883
从指针地址7EBA5360开始的256字节的当前内存转储:
48 FA 49 00 00 00 00 00 00 00 00 00 00 00 00 7C C4 2D 79 00 00 00 00 E0 4B BA 7E
00 00 00 00 00 9C CD 41 00 00 00 7C D2 00 00 D2 75 40 00 AF AB 40 00 D6 B3 40 00
1A 72 11 01 29 AD 40 00 F8 57 11 01 40 D8 D1 00 0D A7 F3 00 58 B6 F3 00 CA 4C 0A 01 73 27 0A 01
58 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 AD 40 00 B8 AB 40 00 D1 57 11 01 F4 1B 0B 01 22 4D 0A 01 87 27 0A 01 0A 48 11 01 52 6E 11 01
胡伊Ä-y。阿克~
.  .  .  .  .  .  .  .  œÍAÒ  .  .  Òu@。¯  «  @  .  Ö  ³  @  .
.  r.)­  @  .  øW..@Ø  Ñ  .  .  §  ó  .  Xó。ÊL。s'。
十。
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  xïï†
<  -  .  .  ÀF¼~。YQº~
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  €  Ò  .  .  Òu@。¯  «  @  .  Ö  ³  @  .
­  @  .  ¸  «  @  .  ñW。ô  .  .  .  “M…”--“H..R n。

泄漏似乎是由TList引起的,但我释放了每个TList.Is
TList.free
还不够吗?

如果创建对象并将其引用保存到TList,则必须在释放TList之前释放它们

for I := 0 to aList.Count-1 do
   anObjectType(aList[I]).Free;

如果您希望自动释放对象,请使用
TObjectList
并设置
OwnsObjects
参数。
TObjectList
在对象被销毁时释放其所有对象的内存。

问题太多。这里一次只问一个问题。我们不做教程,它们明确脱离主题。您最好在Delphi Praxis。最重要的是分配时的堆栈跟踪。这是你没有销毁的东西。通常对象A拥有对象B,并且它们都会泄漏。因此,即使你在A的析构函数中销毁了B,如果你不销毁A,那么它们都会泄漏。@DavidHeffernan那么,我必须在销毁TList之前将每个对象都销毁到TList中?谁知道?我们不知道。我们看不到任何代码。你有没有读过我的评论,告诉你这是离题的?@DavidHeffernan我在这里没有看到太多问题。我不喜欢一个实际上没有解决问题的答案(即使它显然离题了)同时也推测正在使用的代码。@DavidHeffernan,David,除了OP接受我的答案表示他的问题得到解决之外,还需要什么其他证据呢?此外,我不认为这是离题的。答案被接受的事实不会改变任何事。就这个主题而言,我们有没有问题的解决方案!@DavidHeffernan问题是“但我解放了所有的名单。TList.Free不够吗?”。上面是答案。日志消息说单个
TList
没有被释放。但是这个答案显示释放
TList
的内容,而不是释放
TList
本身。答案与问题不匹配。出于这个原因,我否决了它。