![]() |
SetDelimitedText Memory Leak ?
Delphi-Quellcode:
var
FileName: string; SplitPath: TstringList; begin SplitPath := TStringList.Create; SplitPath.StrictDelimiter:= true; SplitPath.Delimiter := '\'; try SplitPath.DelimitedText := ExtractFilePath(FileName); SplitPath.DelimitedText := ''; // bringt nichts SplitPath.Clear; // auch nichts finally FreeAndNil(SplitPath); end; end; SetDelimitedText ist der letzte Aufruf (Memory Leak) Es wird alles freigegeben trotzdem habe ich hier Speicherlecks. |
AW: SetDelimitedText Memory Leak ?
Wenn ich deinen Code kopiere und statt dem ExtractFilePath(FileName) einen festen String nehme, habe ich keinen Leak.
Außerdem wird FileName nicht gesetzt. |
AW: SetDelimitedText Memory Leak ?
Zitat:
Denke jeder weis was gemeint ist. Mir meldet Eurekalog in dieser Zeile 30 Memory Leaks
Delphi-Quellcode:
Files ist ein array of String.
SplitPath.DelimitedText := ExtractFilePath(Files[IntI - 1]);
|
AW: SetDelimitedText Memory Leak ?
Wo steht der Code?
Doch nicht etwa in einer Consolenanwendung in der DPR. Wenn ja, dann verschieb das ganze mal in eine Prozedur. Und welche Delphi-Verison? |
AW: SetDelimitedText Memory Leak ?
Zitat:
Delphi 10.3.3 64 Bit. Gebe ich einen normalen String ein so wie die @DieDolly habe ich das problem auch nicht. Das ist aber nicht die Voraussetzung so wie in meinem Beispiel. |
AW: SetDelimitedText Memory Leak ?
Ich vermute mal der entscheidende Teil deines Codes fehlt in deinem Beispiel. Was machst du mit dem Files Array? Gibst du das sauber frei?
|
AW: SetDelimitedText Memory Leak ?
Zitat:
Delphi-Quellcode:
SetLength(Files, 0); // keine Auswirkung
Es wird auf den Copy befehl verzweigt. Auch wenn ich den String selber splite.
Delphi-Quellcode:
Result[spCount - 1] := Copy(sTemp, 1, spPos - 1); // der leak soll hier entstehen
Das ist der letzte Aufruf in System
Delphi-Quellcode:
function _UStrCopy(const S: UnicodeString; Index, Count: Integer): UnicodeString;
|
AW: SetDelimitedText Memory Leak ?
Am Ende Files := nil oder Finalize(Files) nutzen. Damit sollte der String-Speicher freigegben werden, wenn ich mich hier nicht komplett irre.
Lies dir mal das dazu durch: ![]() |
AW: SetDelimitedText Memory Leak ?
Zitat:
Beide Tips nutzen nichts. Danke, haben kein Auswirkung |
AW: SetDelimitedText Memory Leak ?
Wenn ich dein Beispiel nehme und selber noch eine Files-Array erstelle (Array of String), bekomme ich keine Memoryleaks. Also muss irgendwas im Beispiel noch fehlen, das wir nicht wissen.
Mein Testcode ohne Memoryleaks. Wenn ich Testeshalber das FreeAndNil rausnehme, habe ich wie erwartet ein Memoryleak.
Delphi-Quellcode:
Im DPR: ReportMemoryLeaksOnShutdown := True;
procedure TForm1.FormCreate(Sender: TObject); var FileName: string; SplitPath: TstringList; s: Array of String; begin SetLength(s, 2); s[0] := 'c:\asfdsdf\sdf'; s[1] := 'c:\asfds2df\s2df'; SplitPath := TStringList.Create; try SplitPath.StrictDelimiter:= true; SplitPath.Delimiter := '\'; SplitPath.DelimitedText := ExtractFilePath(s[0]); SplitPath.DelimitedText := ''; // bringt nichts SplitPath.Clear; // auch nichts finally FreeAndNil(SplitPath); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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