1

我用 Delphi XE6 制作了一个非常简单的 Indy 应用程序示例,并在 TIdHttp 中发现了内存泄漏。

  1. 我创建了一个空表单,并在其中放置了一个 IdHttp 组件:

空表

  1. 然后运行 ​​AQtime: 在此处输入图像描述
  2. 并关闭应用程序,报告的结果是这样的: 在此处输入图像描述

同样,FastMM 也会在另一个使用 idHttp 的项目上报告相同的内存泄漏。

--------------------------------2015/11/2 12:00:11--------------------------------
Leak di un blocco. La dimensione è: 20

Questo blocco è stato allocato dal thread 0x12D8, e lo stack trace (indirizzo restituito) in quel momento era:
40678A [System.pas][System][@GetMem$qqri][4351]
4087AF [System.pas][System][TObject.NewInstance$qqrv][15578]
408ED6 [System.pas][System][@ClassCreate$qqrpvzc][16888]
6409D2 [IdThreadSafe.pas][IdThreadSafe][TIdThreadSafe.$bctr$qqrv]
6C996F 
6C9984 
6C99D5 
409F80 [System.pas][System][InitUnits$qqrv][22164]
409FEC [System.pas][System][@StartExe$qqrp23System.PackageInfoTablep17System.TLibModule][22298]
40F4F3 [SysInit.pas][SysInit][@InitExe$qqrpv][1200]
6CA154 
7594495D [BaseThreadInitThunk]
77AA98EE [Unknown function at RtlInitializeExceptionChain]
77AA98C4 [Unknown function at RtlInitializeExceptionChain]

Il blocco è attualmente usato da una istanza della classe: TIdThreadSafeInteger

Il numero di allocazione è: 478

Dump della memoria di 256 byte partendo dall'indirizzo del puntatore 7FE3D2C0:
38 03 64 00 30 9D E9 7F 00 00 00 00 00 00 00 00 1A EF 95 17 80 80 80 80 00 00 00 00 B1 D5 E3 7F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E5 01 00 00 8A 67 40 00 AF 87 40 00 D6 8E 40 00
A4 88 40 00 8D 85 02 00 BA 85 02 00 51 FC 4C 00 DA FB 4C 00 41 43 4B 00 29 92 66 00 5D 9A 6C 00
80 9F 40 00 EC 9F 40 00 F3 F4 40 00 54 A1 6C 00 5D 49 94 75 EE 98 AA 77 C4 98 AA 77 00 00 00 00
00 00 00 00 00 00 00 00 D8 12 00 00 D8 12 00 00 A6 67 40 00 CD 87 40 00 21 8F 40 00 C6 88 40 00
D3 88 40 00 74 FD 4C 00 D3 88 40 00 9E 43 4B 00 D3 88 40 00 7A 92 66 00 14 9F 40 00 14 A3 40 00
97 A1 6C 00 5D 49 94 75 EE 98 AA 77 C4 98 AA 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 08 00 00 00 F8 69 4E 00 50 03 A4 51 A0 41 03 00 80 80 80 80 AF FC 5B AE 80 80 80 80
8  .  d  .  0    é    .  .  .  .  .  .  .  .  .  ï  •  .  €  €  €  €  .  .  .  .  ±  Õ  ã  
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  å  .  .  .  Š  g  @  .  ¯  ‡  @  .  Ö  Ž  @  .
¤  ˆ  @  .    …  .  .  º  …  .  .  Q  ü  L  .  Ú  û  L  .  A  C  K  .  )  ’  f  .  ]  š  l  .
€  Ÿ  @  .  ì  Ÿ  @  .  ó  ô  @  .  T  ¡  l  .  ]  I  ”  u  î  ˜  ª  w  Ä  ˜  ª  w  .  .  .  .
.  .  .  .  .  .  .  .  Ø  .  .  .  Ø  .  .  .  ¦  g  @  .  Í  ‡  @  .  !    @  .  Æ  ˆ  @  .
Ó  ˆ  @  .  t  ý  L  .  Ó  ˆ  @  .  ž  C  K  .  Ó  ˆ  @  .  z  ’  f  .  .  Ÿ  @  .  .  £  @  .
—  ¡  l  .  ]  I  ”  u  î  ˜  ª  w  Ä  ˜  ª  w  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
.  .  .  .  .  .  .  .  ø  i  N  .  P  .  ¤  Q     A  .  .  €  €  €  €  ¯  ü  [  ®  €  €  €  €

--------------------------------2015/11/2 12:00:11--------------------------------
Leak di un blocco. La dimensione è: 36

Questo blocco è stato allocato dal thread 0x12D8, e lo stack trace (indirizzo restituito) in quel momento era:
40678A [System.pas][System][@GetMem$qqri][4351]
4087AF [System.pas][System][TObject.NewInstance$qqrv][15578]
408ED6 [System.pas][System][@ClassCreate$qqrpvzc][16888]
440142 [System.SyncObjs.pas][System.SyncObjs][Syncobjs.TCriticalSection.$bctr$qqrv][1005]
413026 [Winapi.Windows.pas][Winapi.Windows][Windows.GetProcAddress$qqsuipb][34298]
6C98AB 
409F80 [System.pas][System][InitUnits$qqrv][22164]
409FEC [System.pas][System][@StartExe$qqrp23System.PackageInfoTablep17System.TLibModule][22298]
40F4F3 [SysInit.pas][SysInit][@InitExe$qqrpv][1200]
6CA154 
7594495D [BaseThreadInitThunk]
77AA98EE [Unknown function at RtlInitializeExceptionChain]
77AA98C4 [Unknown function at RtlInitializeExceptionChain]

Il blocco è attualmente usato da una istanza della classe: TIdCriticalSection

Il numero di allocazione è: 461

Dump della memoria di 256 byte partendo dall'indirizzo del puntatore 7FE99830:
CC D7 60 00 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 D0 07 00 02 00 00 00 00
EF F7 FF B0 80 80 80 80 00 00 00 00 61 99 E9 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
D4 01 00 00 8A 67 40 00 DF A4 40 00 10 A7 40 00 0D E4 40 00 ED 49 B4 77 9E A9 B0 77 57 3C B4 77
38 3C B4 77 38 3C B4 77 79 E8 AF 77 6C BD A9 77 D8 A2 94 75 F5 A2 94 75 7B A2 94 75 44 A2 94 75
5B A2 94 75 EC BC A9 77 DA A1 94 75 AD A1 94 75 C0 A1 94 75 4E A1 94 75 D8 12 00 00 D8 12 00 00
A6 67 40 00 99 A5 40 00 41 A1 40 00 87 B4 62 00 14 9F 40 00 14 A3 40 00 97 A1 6C 00 5D 49 94 75
EE 98 AA 77 C4 98 AA 77 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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 00 00 00 B0 04 02 00 B0 DC A8 C7
Ì  ×  `  .  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  .  .  .  .  .  .  .  .  .  .  .  .  Ð  .  .  .  .  .  .  .
ï  ÷  ÿ  °  €  €  €  €  .  .  .  .  a  ™  é    .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
Ô  .  .  .  Š  g  @  .  ß  ¤  @  .  .  §  @  .  .  ä  @  .  í  I  ´  w  ž  ©  °  w  W  <  ´  w
8  <  ´  w  8  <  ´  w  y  è  ¯  w  l  ½  ©  w  Ø  ¢  ”  u  õ  ¢  ”  u  {  ¢  ”  u  D  ¢  ”  u
[  ¢  ”  u  ì  ¼  ©  w  Ú  ¡  ”  u  ­  ¡  ”  u  À  ¡  ”  u  N  ¡  ”  u  Ø  .  .  .  Ø  .  .  .
¦  g  @  .  ™  ¥  @  .  A  ¡  @  .  ‡  ´  b  .  .  Ÿ  @  .  .  £  @  .  —  ¡  l  .  ]  I  ”  u
î  ˜  ª  w  Ä  ˜  ª  w  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  "  .  .  .  °  .  .  .  °  Ü  ¨  Ç

--------------------------------2015/11/2 12:00:11--------------------------------
Leak di un blocco. La dimensione è: 36

Questo blocco è stato allocato dal thread 0x12D8, e lo stack trace (indirizzo restituito) in quel momento era:
40678A [System.pas][System][@GetMem$qqri][4351]
4087AF [System.pas][System][TObject.NewInstance$qqrv][15578]
408ED6 [System.pas][System][@ClassCreate$qqrpvzc][16888]
440142 [System.SyncObjs.pas][System.SyncObjs][Syncobjs.TCriticalSection.$bctr$qqrv][1005]
4087B8 [System.pas][System][TObject.NewInstance$qqrv][15578]
6409EB [IdThreadSafe.pas][IdThreadSafe][TIdThreadSafe.$bctr$qqrv][251]
6C99D5 
409F80 [System.pas][System][InitUnits$qqrv][22164]
409FEC [System.pas][System][@StartExe$qqrp23System.PackageInfoTablep17System.TLibModule][22298]
40F4F3 [SysInit.pas][SysInit][@InitExe$qqrpv][1200]
6CA154 
7594495D [BaseThreadInitThunk]
77AA98EE [Unknown function at RtlInitializeExceptionChain]
77AA98C4 [Unknown function at RtlInitializeExceptionChain]

Il blocco è attualmente usato da una istanza della classe: TIdCriticalSection

Il numero di allocazione è: 479

Dump della memoria di 256 byte partendo dall'indirizzo del puntatore 7FE99D30:
CC D7 60 00 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 D0 07 00 02 00 00 00 00
79 CE E4 17 80 80 80 80 00 00 00 00 61 9E E9 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E2 01 00 00 8A 67 40 00 DF A4 40 00 6C A9 40 00 62 6D 4B 00 BD 68 4B 00 4E 3B 66 00 2D 9A 6C 00
80 9F 40 00 EC 9F 40 00 F3 F4 40 00 54 A1 6C 00 5D 49 94 75 EE 98 AA 77 C4 98 AA 77 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 D8 12 00 00 D8 12 00 00
99 A5 40 00 D1 BA 40 00 19 BA 40 00 19 BB 40 00 81 C8 40 00 25 C5 40 00 61 C5 40 00 36 C7 40 00
D7 6E 4B 00 F2 67 4B 00 D3 88 40 00 B6 40 66 00 14 9F 40 00 14 A3 40 00 97 A1 6C 00 5D 49 94 75
EE 98 AA 77 C4 98 AA 77 00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 B0 04 02 00 E4 6A 4A 51
Ì  ×  `  .  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  .  .  .  .  .  .  .  .  .  .  .  .  Ð  .  .  .  .  .  .  .
y  Î  ä  .  €  €  €  €  .  .  .  .  a  ž  é    .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
â  .  .  .  Š  g  @  .  ß  ¤  @  .  l  ©  @  .  b  m  K  .  ½  h  K  .  N  ;  f  .  -  š  l  .
€  Ÿ  @  .  ì  Ÿ  @  .  ó  ô  @  .  T  ¡  l  .  ]  I  ”  u  î  ˜  ª  w  Ä  ˜  ª  w  .  .  .  .
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  Ø  .  .  .  Ø  .  .  .
™  ¥  @  .  Ñ  º  @  .  .  º  @  .  .  »  @  .    È  @  .  %  Å  @  .  a  Å  @  .  6  Ç  @  .
×  n  K  .  ò  g  K  .  Ó  ˆ  @  .  ¶  @  f  .  .  Ÿ  @  .  .  £  @  .  —  ¡  l  .  ]  I  ”  u
î  ˜  ª  w  Ä  ˜  ª  w  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  °  .  .  .  ä  j  J  Q

我误解了这些结果还是 idHttp 中存在有效的内存泄漏?

在最后一种情况下,我该如何解决?

谢谢

4

0 回答 0