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 1 von 3  1 23   
Benutzerbild von Chemiker
Chemiker
Online

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

Memory Leak in einer TStringList

  Alt 9. Aug 2009, 23:21
Hallo,

ich habe in meinem Programm in einer TStringList ein Memory Leak.

Wie kann man eingrenzen in welcher Unit das Leak auftritt? Eine grobe Eingrenzung wo ich Suchen muss würde schon Helfen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
wfoertsch

Registriert seit: 14. Jan 2005
Ort: Berlin
71 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 07:45
Zitat von Chemiker:
Hallo,

ich habe in meinem Programm in einer TStringList ein Memory Leak.

Wie kann man eingrenzen in welcher Unit das Leak auftritt? Eine grobe Eingrenzung wo ich Suchen muss würde schon Helfen.

Bis bald Chemiker

Hallo,

sehr gut kannst deine Leaks mit Eurekalog finden ... einfach catch memory leaks einschalten ^^

wolle
Wolfgang Foertsch
(\_/)
(O.o)
(> < ) <---This is Bunny. Copy Bunny into your signature to help him on his way to world domination.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 08:01
FastMM4 sollte zu den gleichen Ergebnissen kommen. Der Link führt dich zu einer Seite, von der Du sowohl FastMM4 als auch eine GUI downloaden kannst.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 08:11
hier kannst du natürlich auch selber mal etwas nachschauen ... ein Leck is so'ner TStringList entsteht ja meißt nicht von alleine, also wenn du den .Objects irgendwo etwas zuweißt, dann schauen, ob dieses beim Freigeben der Liste, bzw. beim Löschen von Einträgen auch mit entfernt/freigegeben wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker
Online

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

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 19:16
Hallo,

Danke für die Antworten.

@wfoertsch: Ich benutze FastMM4 schon.

@alzaimar: FastMM4 zeigt mit ja das Memory Leak an, dass Problem ist nur, er sagt es kommt in einer TStringList vor, allerdings nicht in welcher Unit. Habe mir auch die
MMProject_MemoryManager_EventLog.txt ausgeben lassen, aber dort steht kein Hinweis, oder ich bin nicht in der Lage das richtig zu lesen.

@himutsu: Das ist schon klar, allerdings bei einem umfangreichen Programm ist das leider nicht mehr so einfach.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 19:26
Hallo @Chemiker,

gleiches Problem hatte ich in meinem Projekt letztens. Es blieb mir aber nichts weiter übrig, als jede Unit/ Komponente an sich zu testen (in einem neuen Projekt, wo nur die jeweilige Komponente/ Unit drin liegt). Bei mir, war es bei TStringlist zu 80% ein vergessen des override beim Destroyer, wodurch ich zwar das Free in den Destroyer geschrieben hatte, aber ebend nicht ausgeführt wurde.

MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 19:28
Hallo,

also ich benutze MemCheck,
der zeigt mir sowohl die Komponente also auch die Stelle,
wo genau der Speicher angefordert wurd.

Schau doch mal in der FastMM-Inc nach,
ob du einen Parameter nicht gesetzt hast.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker
Online

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

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:07
Hallo,

ich habe mal ein kleines Demo-Programm geschrieben und eine TStringlist nicht freigegeben.

Das ist die Log-File dazu:


Code:
--------------------------------2009/8/10 19:58:31--------------------------------
Ein Speicherblock hat Speicher verloren. Die Größe ist: 68

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]
4592B3 [Forms.pas][Forms][TCustomForm.DoCreate][2756]
458EFB [Forms.pas][Forms][TCustomForm.AfterConstruction][2680]
403E1C [system.pas][System][@AfterConstruction][9537]

Der Block wird momentan für eine Objektklasse benutzt TStringList

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
Man kann nicht erkennen in welcher Unit das Leak auftritt.

Noch irgendwer eine Idee?

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
 
#9

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:13
53 - 68 Bytes: TStringList x 1 klingt das nicht danach, als wenn du eine ganze (leere) StringList irgendwo vergessen hast freizugeben?
du hat nicht zufällig eine StringList in TForm2.FormCreate erstellt und in .OnDestroy nicht wieder freigegeben?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker
Online

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

Re: Memory Leak in einer TStringList

  Alt 10. Aug 2009, 20:24
Hallo,

himitsu, genau. Jetzt musst Du mir nur noch verraten, wie man das in dem Log-File erkennt.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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:45 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