![]() |
Delphi-Version: 10.2 Tokyo
Warum meckert FastMM hier ein Speicherleck an?
Folgender Code:
Delphi-Quellcode:
Der Memory-Manager meldet:
procedure TForm1.TuWas;
var i:integer; Txt:string; VerzListe:TStringList; PathList:TJamPathList; begin ... PathList := TJamPathList.Create; // TJamPathList = TStringList VerzListe := TStringList.Create; VerzListe.Sorted := True; VerzListe.Duplicates := dupIgnore; Try ... For i := PathList.Count - 1 downto 0 do VerzListe.Add(ExtractFileDir(PathList[i])); Finally PathList.OwnsObjects := True; FreeAndNil(PathList); VerzListe.OwnsObjects := True; FreeAndNil(VerzListe); End; Zitat:
Ich habe die Strings der Liste manuell auf '' gesetzt und alles Mögliche - FastMM meint, da sei ein Speicherleck. Kann das sein, dass FastMM da Unsinn berichtet? |
AW: Warum meckert FastMM hier ein Speicherleck an?
In deinem Code kann man nicht sehen ob/wo PathList:TJamPathList erstellt wird.
|
AW: Warum meckert FastMM hier ein Speicherleck an?
Oder was es überhaupt ist. Laut
![]()
Delphi-Quellcode:
aber was nun ein
TJamPathList = class(TFilenameList);
Delphi-Quellcode:
ist habe ich nirgendwo im Internetz finden können...
TFilenameList
|
AW: Warum meckert FastMM hier ein Speicherleck an?
Hallo,
sicher, dass es genau diese Stelle ist? Mache doch mal ein
Delphi-Quellcode:
PathList:= TJamPathList.Create;
try PathList.Add('Bla'); finally PathList.Free; end; |
AW: Warum meckert FastMM hier ein Speicherleck an?
Steht in Shell_Win32:
Delphi-Quellcode:
Ich habe es oben eingefügt. Ich hielt es nicht für wichtig, die Verzliste allein würde doch genügen. Ich habe es nur mit aufgenommen, da beide angemeckert werden.
TFilenameList = TStringList;
@hoika: Wenn ich nur
Delphi-Quellcode:
ausführe, bleibt FastMM stumm.
JamPathList:= TJamPathList.Create;
try JamPathList.Add('Bla'); finally JamPathList.Free; end; Was soll das bedeuten? Sowohl PathList als auch VerzListe sind lokale Variablen. Ouuh, das war ein guter Hinweis. Die JamPathList wird in einer Routine GetListOfAllFiles gefüllt, in der die Liste nicht nur gefüllt, sondern auch erzeugt wird (!).
Delphi-Quellcode:
mal weggelassen, funktioniert nicht nur, sondern die Warnung ist auch weg. Und zwar die Warnung bei Verzliste auch. Da komme ich vielleicht auch selbst dahinter, warum das so ist.
PathList := TJamPathList.Create;
|
AW: Warum meckert FastMM hier ein Speicherleck an?
Hallo,
Zitat:
Zeige doch mal etwas mehr Code, siehe weiter oben. Vielleicht ist es auch eine völlig andere Stelle? OK. hast du ;) Was soll das OwnsObject? Klammere alles aus, was in Deinem ... steht. Auch das Sorted und Duplicates erst mal weg. Dann immer weiter Code reinnehmen, bis Du die Stelle gefunden hast. Und zuletzt läßt sich Dein Code gar nicht kompilieren PathList:TJamPathList; begin ... JamPathList := TJamPathList.Create; // TJamPathList = TStringList |
AW: Warum meckert FastMM hier ein Speicherleck an?
Du hast PathList und JamPathList...eins davon gibst du nicht frei.
|
AW: Warum meckert FastMM hier ein Speicherleck an?
Zitat:
Das OwnsObject und Sorted sind Überbleibsel von meinen Versuchen, das Object manuell zu leeren... Das war eine rasche Lösung, vielen Dank. Tut mir leid, dass ich mit der wechselnden Verwendung von JamPathList und PathList für Verwirrung gesorgt habe. JamPathList ist eine einfache Stringlist, und ich wollte dem Rätselraten vorbeugen, was eine JamPathList genau ist... Hatte leider einen paradoxen Effekt. |
AW: Warum meckert FastMM hier ein Speicherleck an?
Wir brauchen den Code
|
AW: Warum meckert FastMM hier ein Speicherleck an?
Hallo,
hast Du denn jetzt mal alles nicht relevante ausgeklammert? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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 by Thomas Breitkreuz