Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memory Leak in einer TStringList (https://www.delphipraxis.net/138398-memory-leak-einer-tstringlist.html)

himitsu 10. Aug 2009 19:32

Re: Memory Leak in einer TStringList
 
Code:
--------------------------------2009/8/10 19:58:31--------------------------------
Ein Speicherblock hat Speicher verloren. Die Größe ist: 68
                            [color=#ff0000]Größe des gefundenen Blocks ^^[/color]

Aufrufstack, von wem der Block momentan belegt wird (Rücksprungadressen):
402E8A [system.pas][System][@GetMem][2648]
403A3F [system.pas][System][TObject.NewInstance][8824]
403DAE [system.pas][System][@ClassCreate][9489]
403A74 [system.pas][System][TObject.Create][8839]
41218B [sysutils.pas][SysUtils][TThreadLocalCounter.Open][16571]
41211E [sysutils.pas][SysUtils][TThreadLocalCounter.HashIndex][16552]
465A03 [uHPLDemoFastMM.pas][uHPLDemoFastMM][TForm2.FormCreate][44]
[color=#ff0000]^^ innerhalb der Aufrufe war das hier wichtig[/color]
4592B3 [Forms.pas][Forms][TCustomForm.DoCreate][2756]
458EFB [Forms.pas][Forms][TCustomForm.AfterConstruction][2680]
[color=#ff0000]^^ dieser rief jenen auf uswusf. (Lese-/Aufrufrichtung nach oben gehend)[/color]
403E1C [system.pas][System][@AfterConstruction][9537]
[color=#ff0000]^^ das wer der erste "Auslöser" der Speicherreservierung[/color]

Der Block wird momentan für eine Objektklasse benutzt TStringList
[color=#ff0000]^^ hier steht nochmals der Typ dessen, was in dem Speicher vermutlich drin ist[/color]

The allocation number is: 346

Aktueller Speicherauszug von 256 Bytes, beginnend ab Zeigeradresse 7FF7C5A0:
68 74 41 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 00 00 00 00 00 00 00 00 00 DD 5B 73 7D 0C 01 47 00
0C 01 47 00 0C 01 47 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62 01 00 00 8A 2E 40 00 3F 3A 40 00 AE 3D 40 00 74 3A 40 00 EC 59 46 00 90 2B 44 00 42 EF 42 00
AB F0 42 00 D0 25 44 00 AD 31 7A 75 A6 2E 40 00 5D 3A 40 00 F9 3D 40 00 FD B5 41 00 A3 3A 40 00
F1 59 46 00 90 2B 44 00 42 EF 42 00 AB F0 42 00 D0 25 44 00 38 00 00 00 68 74 41 00 9D FC 9F FA
0C FE 46 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00
0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 0C 01 47 00 62 03 60 05 0C 01 47 00
h t A . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . Ý  [  s }  . . G .
. . G . . . G . . . . . . . . . . . . . . . . . . . . . . . . .
b . . . Š  . @  . ?  : @  . ®  = @  . t : @  . ì  Y F .   +  D . B ï  B .
«  ð  B . Р %  D . *  1  z u ¦  . @  . ] : @  . ù  = @  . ý  µ  A . £  : @  .
ñ  Y F .   +  D . B ï  B . «  ð  B . Р %  D . 8  . . . h t A .   ü  Ÿ  ú
. þ  F . . . G . . . G . . . G . . . G . . . G . . . G . . . G .
. . G . . . G . . . G . . . G . . . G . . . G . b . `  . . . G .

--------------------------------2009/8/10 19:58:31--------------------------------
Diese Anwendung hat Speicher verloren. Die Größen von kleinen Speicherblöcken, die verlorengegangen sind, betragen (ausgenommen erwartete Speicherlecks, die durch Zeiger registriert wurden):

53 - 68 Bytes: TStringList x 1
[color=#ff0000]^^ und in de kurzen Ansich sieht man auch schon etwas, also daß z.B. anscheinend eine (x 1) TStringList noch nicht freigegeben wurde[/color]

Satty67 10. Aug 2009 19:48

Re: Memory Leak in einer TStringList
 
Sehr schön erklärt, da kann ich auch gleich was lernen ;)

Wichtig finde ich, das FastMM4 (o.ä.) von Anfang an mit dabei ist. Das hat mir bisher Suchen erspart, weil man einen Freigabe-Fehler gleich mitbekommt und dann nur im zuletzt bearbeiteten Code suchen muss (meistens...)

Chemiker 10. Aug 2009 19:51

Re: Memory Leak in einer TStringList
 
Hallo himitsu,

Code:
465A03 [uHPLDemoFastMM.pas][uHPLDemoFastMM][TForm2.FormCreate][44]
danke für den Hinweis, es ist eigentlich ganz einfach die [44], gibt die Zeilenzahl an wo die nicht freigegebene TStringlist steht.

Wenn man eine lokale TStringlist nicht freigibt steht da die Procedure in der sie Deklariert worden ist.

Bis bald Chemiker

Chemiker 10. Aug 2009 19:56

Re: Memory Leak in einer TStringList
 
Hallo Sattey67,

keine schlechte Idee, aber das Projekt ist aus mehren Modulen zusammengesetzt und ich vermute das ich beim Zusammensetzen irgend einen Fehler gemacht habe.

Bis bald Chemiker

himitsu 10. Aug 2009 20:30

Re: Memory Leak in einer TStringList
 
Zitat:

Zitat von Chemiker
Wenn man eine lokale TStringlist nicht freigibt steht da die Procedure in der sie Deklariert worden ist.

aber nur wenn man es mitloggen läßt, ansonsten steht nur die etwaige Größe und der vermutluche Inhalt da (z.B. in der kleinen MessageBox bei Programmende, wenn man sich die Belegung ausgeben läßt)

Chemiker 10. Aug 2009 20:31

Re: Memory Leak in einer TStringList
 
Hallo,


Code:
--------------------------------2009/8/10 21:26:11--------------------------------
Ein Speicherblock hat Speicher verloren. Die Größe ist: 68

Aufrufstack, von wem der Block momentan belegt wird (Rücksprungadressen):
40301A [system.pas][System][@GetMem][2648]
404693 [system.pas][System][TObject.NewInstance][8824]
404A5A [system.pas][System][@ClassCreate][9489]
4046C8 [system.pas][System][TObject.Create][8839]
4056A0 [system.pas][System][@LStrAsg][12354]
4DDC4F [IB_Services.pas][IB_Services][TpFIBCustomService.Create][699]
4DE243 [IB_Services.pas][IB_Services][TpFIBServerProperties.Create][1032]
42D984 [classes.pas][Classes][CreateComponent][6503]
42DBB9 [classes.pas][Classes][TReader.ReadComponent][6549]
42CF55 [classes.pas][Classes][TReader.EndOfList][6170]

Der Block wird momentan für eine Objektklasse benutzt TStringList

The allocation number is: 3791

Aktueller Speicherauszug von 256 Bytes, beginnend ab Zeigeradresse 7FE50E40:
F0 49 42 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 18 DF 4D 00 50 68 F6 7F 20 DF 4D 00 50 68 F6 7F 96 41 75 7D 10 D1 5E 00
10 D1 5E 00 10 D1 5E 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E1 0E 00 00 1A 30 40 00 93 46 40 00 5A 4A 40 00 0A 8B 44 00 10 2F 43 00 FD 55 45 00 7C C4 4F 00
24 AF 4E 00 84 D9 42 00 B9 DB 42 00 36 30 40 00 B1 46 40 00 A5 4A 40 00 D0 90 42 00 F7 46 40 00
48 68 41 00 93 57 45 00 A5 4A 40 00 8F C8 4F 00 CF B0 4E 00 40 00 00 00 98 1F 44 00 75 54 84 85
10 CE 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00
10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00 10 D1 5E 00
ð  I B . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . ß  M . P h ö       ß  M . P h ö    –  A u }  . Ñ  ^  .
. Ñ  ^  . . Ñ  ^  . . . . . . . . . . . . . . . . . . . . . . . . .
á  . . . . 0  @  . “  F @  . Z J @  . . ‹  D . . /  C . ý  U E . |  Ä  O .
$  ¯  N . „  Ù  B . ¹  Û  B . 6  0  @  . ±  F @  . ¥  J @  . Р   B . ÷  F @  .
H h A . “  W E . ¥  J @  .   È  O . Ï  °  N . @  . . . ˜  . D . u T „  …
. Π ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  .
. Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  . . Ñ  ^  .

--------------------------------2009/8/10 21:26:11--------------------------------
Diese Anwendung hat Speicher verloren. Die Größen von kleinen Speicherblöcken, die verlorengegangen sind, betragen (ausgenommen erwartete Speicherlecks, die durch Zeiger registriert wurden):

53 - 68 Bytes: TStringList x 1
das ist das Log-File vom richtigen Programm, ich kann nicht erkennen wo die TStringlist stehen soll.

Bis bald Chemiker

himitsu 10. Aug 2009 20:36

Re: Memory Leak in einer TStringList
 
lädst du irgendwo etwas mit TReader oder einem seiner Nachfahren?

bzw. läßt sich irgendwo die rückverfolgung des Aufrufstacks höhersetzen?
(hier werden ja anscheinend nur maximal 10 Sprünge zurückverfolgt)

Chemiker 10. Aug 2009 20:46

Re: Memory Leak in einer TStringList
 
Hallo,

ich lade nichts mit TReader, es sei denn das eine Fremdkomponente das macht.

Bis bald Chemiker

himitsu 10. Aug 2009 20:50

Re: Memory Leak in einer TStringList
 
vielleicht irgendeine Deserialisierung im Zusammenhang mit diesem TpFIBServerProperties?

Chemiker 10. Aug 2009 21:28

Re: Memory Leak in einer TStringList
 
Hallo himitsu,

ich kann nichts erkennen. Ich glaube ich werde jede einzelne TStringList im Project raussuchen und nachsehen ob sie ordentlich frei gegeben worden ist.

Die Anwendung läuft jetzt seit ca. 4 Monaten Tag und Nacht, bis jetzt scheint das Memory Leak nicht sonderlich zu stören, aber trotzdem möchte ich den Fehler finden und korrigieren.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz