![]() |
Memory Leak in einer TStringList
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 |
Re: Memory Leak in einer TStringList
Zitat:
Hallo, sehr gut kannst deine Leaks mit ![]() wolle |
Re: Memory Leak in einer TStringList
![]() |
Re: Memory Leak in einer TStringList
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.
|
Re: Memory Leak in einer TStringList
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 |
Re: Memory Leak in einer TStringList
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 |
Re: Memory Leak in einer TStringList
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 |
Re: Memory Leak in einer TStringList
Hallo,
ich habe mal ein kleines Demo-Programm geschrieben und eine TStringlist nicht freigegeben. Das ist die Log-File dazu:
Code:
Man kann nicht erkennen in welcher Unit das Leak auftritt.
--------------------------------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 Noch irgendwer eine Idee? Bis bald Chemiker |
Re: Memory Leak in einer TStringList
Delphi-Quellcode:
klingt das nicht danach, als wenn du eine ganze (leere) StringList irgendwo vergessen hast freizugeben? :gruebel:
53 - 68 Bytes: TStringList x 1
du hat nicht zufällig eine StringList in TForm2.FormCreate erstellt und in .OnDestroy nicht wieder freigegeben? |
Re: Memory Leak in einer TStringList
Hallo,
himitsu, genau. Jetzt musst Du mir nur noch verraten, wie man das in dem Log-File erkennt. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr. |
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