AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetDelimitedText Memory Leak ?

Ein Thema von venice2 · begonnen am 9. Mär 2020 · letzter Beitrag vom 10. Mär 2020
Antwort Antwort
Seite 1 von 3  1 23      
venice2
(Gast)

n/a Beiträge
 
#1

SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 11:18
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.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 11:33
Wenn ich deinen Code kopiere und statt dem ExtractFilePath(FileName) einen festen String nehme, habe ich keinen Leak.
Außerdem wird FileName nicht gesetzt.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 11:41
Außerdem wird FileName nicht gesetzt.
Getippt und zur Demonstration nicht nötig.
Denke jeder weis was gemeint ist.

Mir meldet Eurekalog in dieser Zeile 30 Memory Leaks
SplitPath.DelimitedText := ExtractFilePath(Files[IntI - 1]); Files ist ein array of String.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 12:34
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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 12:36
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?
Nein normale Procedure.
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.

Geändert von venice2 ( 9. Mär 2020 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 14:15
Ich vermute mal der entscheidende Teil deines Codes fehlt in deinem Beispiel. Was machst du mit dem Files Array? Gibst du das sauber frei?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 14:19
Ich vermute mal der entscheidende Teil deines Codes fehlt in deinem Beispiel. Was machst du mit dem Files Array? Gibst du das sauber frei?
SetLength(Files, 0); // keine Auswirkung
Es wird auf den Copy befehl verzweigt.
Auch wenn ich den String selber splite.

Result[spCount - 1] := Copy(sTemp, 1, spPos - 1); // der leak soll hier entstehen
Das ist der letzte Aufruf in System
function _UStrCopy(const S: UnicodeString; Index, Count: Integer): UnicodeString;

Geändert von venice2 ( 9. Mär 2020 um 14:25 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 14:34
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: https://www.drbob42.com/delphi4/dynarray.htm
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 14:42
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: https://www.drbob42.com/delphi4/dynarray.htm
Wenn ich das Array mit SetLength(Files, 0); auf 0 setze dann ist es NIL.
Beide Tips nutzen nichts. Danke, haben kein Auswirkung
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: SetDelimitedText Memory Leak ?

  Alt 9. Mär 2020, 14:56
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:01 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