Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SetLength(DynArray,0) gibt den speicher nicht frei (https://www.delphipraxis.net/203636-setlength-dynarray-0-gibt-den-speicher-nicht-frei.html)

Stevie 6. Mär 2020 14:40

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Zitat:

Zitat von DenkDirNix (Beitrag 1459064)
Die Strings müssen auch per User-Code freigegeben werden.

Was? Unfug, managed Types in Records werden implizit finalisiert, wenn das Array resized wird.

Zitat:

Zitat von DelTurbo (Beitrag 1459058)
Ich durchlaufe dann erst eine Schleife und gebe die TStringList mit .Free wieder frei.

Nur, damit es am Ende nicht an einem kleinen fehlenden s liegt - da sind 2mal TStringList in deinem Record, die gibst du beide frei, ja?

DieDolly 6. Mär 2020 14:40

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Zitat:

Was? Unfug
Meine Rede. So einen Quatsch habe ich auch noch nirgendwo gelesen.

Einfach die Record-Einträge mit Dispose vernichten und dann die Liste freigeben oder wenn du ein Array hast das auf 0 setzen.

DelTurbo 6. Mär 2020 14:41

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Klappt auch nicht. Es wird auch wesentlich mehr speicher belegt als in den zwei Strings ist.

DieDolly 6. Mär 2020 14:43

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Kommentier mal alles bis auf einen einzigen String in deinem Record und lass dann alles laufen.
Kommentier vorher aber auch alle Vorkommen der vorher kommentieren Datentypen überall.

Ich habe langsam den Eindruck, dass das Problem woanders ist.

Stevie 6. Mär 2020 14:43

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
FastMM rein und ausgeben lassen, was leakt - dieses Rumgerate anhand von Codeschnipseln ist nicht zielführend.

DelTurbo 6. Mär 2020 14:47

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Mit FastMM hab ich noch nie was gemacht. Müsste ich mir erstmal ansehen. Aber hier die schleife die frei geben soll.

Delphi-Quellcode:
procedure MemFreeHelper;
var
  i      :Integer;
begin
    for i:=Low(EMailData) to High(EMailData) do begin
      EMailData[i].InUse:=False;
      EMailData[i].HTML.Free;
      EMailData[i].TXT.Free;
    end;
    SetLength(EMailData,0);
end;

DieDolly 6. Mär 2020 14:49

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Zitat:

Mit FastMM hab ich noch nie was gemacht.
ReportMemoryLeaksOnShutdown := True; reicht für den Anfang auch.

Schmeiß mal HTML und TXT KOMPLETT raus und teste dann.

DelTurbo 6. Mär 2020 15:10

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Vielen vielen dank an euch. Ich hatte einen Fehler im befüllen des Arrays. :oops:
Nachtrag: Wenn ich einen TStringlist mit .Text befülle, muss ich vorher doch kein .Clear machen, oder?

Medium 6. Mär 2020 15:25

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Korrekt. .Clear ist im Grunde nichts anderes als .Text := '';

DelTurbo 6. Mär 2020 15:55

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Eine Frage habe ich noch. Wie finde ich die sachen die er hier anmeckert??? Ist mit DebugInfos usw. Kompiliert.

Code:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

1 - 12 bytes: String x 22
13 - 20 bytes: String x 3
21 - 28 bytes: String x 5
29 - 36 bytes: String x 5
37 - 44 bytes: String x 3
45 - 52 bytes: String x 3
53 - 60 bytes: String x 2
61 - 68 bytes: String x 2
69 - 76 bytes: String x 1
77 - 84 bytes: String x 3
149 - 156 bytes: String x 1

The sizes of unexpected leaked medium and large blocks are: 15916

---------------------------
OK  
---------------------------


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Seite 2 von 3     12 3      

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