AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi SetLength(DynArray,0) gibt den speicher nicht frei
Thema durchsuchen
Ansicht
Themen-Optionen

SetLength(DynArray,0) gibt den speicher nicht frei

Ein Thema von DelTurbo · begonnen am 6. Mär 2020 · letzter Beitrag vom 7. Mär 2020
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#11

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

  Alt 6. Mär 2020, 14:40
Die Strings müssen auch per User-Code freigegeben werden.
Was? Unfug, managed Types in Records werden implizit finalisiert, wenn das Array resized wird.

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?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
DieDolly

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

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

  Alt 6. Mär 2020, 14:40
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.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#13

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

  Alt 6. Mär 2020, 14:41
Klappt auch nicht. Es wird auch wesentlich mehr speicher belegt als in den zwei Strings ist.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DieDolly

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

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

  Alt 6. Mär 2020, 14:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#15

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

  Alt 6. Mär 2020, 14:43
FastMM rein und ausgeben lassen, was leakt - dieses Rumgerate anhand von Codeschnipseln ist nicht zielführend.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#16

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

  Alt 6. Mär 2020, 14:47
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;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DieDolly

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

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

  Alt 6. Mär 2020, 14:49
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.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#18

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

  Alt 6. Mär 2020, 15:10
Vielen vielen dank an euch. Ich hatte einen Fehler im befüllen des Arrays.
Nachtrag: Wenn ich einen TStringlist mit .Text befülle, muss ich vorher doch kein .Clear machen, oder?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#19

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

  Alt 6. Mär 2020, 15:25
Korrekt. .Clear ist im Grunde nichts anderes als .Text := '';
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#20

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

  Alt 6. Mär 2020, 15:55
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 meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:16 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