AGB  ·  Datenschutz  ·  Impressum  







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

Array korrekt freigeben

Ein Thema von woodie · begonnen am 23. Sep 2025 · letzter Beitrag vom 26. Sep 2025
Antwort Antwort
Seite 2 von 2     12   
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.077 Beiträge
 
Delphi 12 Athens
 
#1

AW: Array korrekt freigeben

  Alt 24. Sep 2025, 11:00
Ihr verwirrt mich!
Ich dachte immer
Delphi-Quellcode:
Setlength(AArray,0);
AArray:=nil;
sind beides das gleiche.

und von
Finalize(AArray); Habe ich noch nie gehört! Ist das auch das gleiche?
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty (24. Sep 2025 um 11:04 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.226 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Array korrekt freigeben

  Alt 24. Sep 2025, 11:12
Finalize ist eigentlich ein allgemeingültiges "gib das hier vorab schon mal frei" für eine dynamische Variable mit ARC (also wohl alles außer TObject).

https://docwiki.embarcadero.com/Libr...ystem.Finalize

Nehme ich eigentlich immer. Bonus: Der Compiler gibt dir einen Hinweis, wenn das nicht notwendig ist, z.B. wenn du Finalize auf einem Record aufrufst, der gar keine dynamischen Variablen hat.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Array korrekt freigeben

  Alt 24. Sep 2025, 12:37
sind beides das gleiche.
Im Ergebnis ist es gleich.

:=nil ist einfacher und schnell/optimaler, da hier nur freigegeben wird, während SetLength erst noch bissl prüft und dann was macht und auch anderes machen könnte (z.B. wenn nicht 0 reingegeben)

Finalize wird praktisch automatisch im END; gemacht und man verwendet es, z.B. wenn man mit Pointer rumpfuscht.

Beim Finalize (InitializeArray/FinalizeArray und InitializeRecord/FinalizeRecord, was ein Array mit Länge 1 darstellt) muß man auch teilweise aufpassen,
denn je nach Aufruf kann man sich damit alles zerballern ... z.B. mit den Finalize-Funktionen, welche am Ende nicht den Speicher Nullen
und initialize prüft nicht, ob schon was drin ist (es geht blind davon aus, dass der Speicher neu ist, also noch nie initialisiert oder gar benutzt wurde)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Sep 2025 um 12:42 Uhr)
  Mit Zitat antworten Zitat
woodie

Registriert seit: 30. Sep 2020
8 Beiträge
 
#4

AW: Array korrekt freigeben

  Alt Gestern, 07:34
ich habe im Beispiel nur alle 3 Varianten aufgeführt:

Code:
Setlength(AArray,0);
Finalize(AArray);
AArray:=nil;
um 'sicher' zu gehen, normalerweise nutze ich nur Setlength(AArray,0);

Die Frage ist aber immer noch, warum es mir von FastMM5 als Leak angezeigt wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:28 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-2025 by Thomas Breitkreuz