我用 Delphi XE6 制作了一个非常简单的 Indy 应用程序示例,并在 TIdHttp 中发现了内存泄漏。
- 我创建了一个空表单,并在其中放置了一个 IdHttp 组件:
同样,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 中存在有效的内存泄漏?
在最后一种情况下,我该如何解决?
谢谢