AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memory Leak in einer TStringList

Ein Thema von Chemiker · begonnen am 9. Aug 2009 · letzter Beitrag vom 13. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.125 Beiträge
 
Delphi 12 Athens
 
#11

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:32
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]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:48
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...)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:51
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:56
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.125 Beiträge
 
Delphi 12 Athens
 
#15

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 21:30
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 21:31
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.125 Beiträge
 
Delphi 12 Athens
 
#17

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 21:36
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 21:46
Hallo,

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

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.125 Beiträge
 
Delphi 12 Athens
 
#19

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 21:50
vielleicht irgendeine Deserialisierung im Zusammenhang mit diesem TpFIBServerProperties?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 22:28
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz