AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?!
Thema durchsuchen
Ansicht
Themen-Optionen

In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?!

Ein Thema von r29d43 · begonnen am 16. Nov 2021 · letzter Beitrag vom 17. Nov 2021
Antwort Antwort
r29d43

Registriert seit: 18. Jan 2007
287 Beiträge
 
Delphi 10.4 Sydney
 
#1

In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?!

  Alt 16. Nov 2021, 13:53
Hallo,

irgendwie hatte sich die Frage für mich bis dato noch gar nicht so richtig ergeben, weil ich dynamische Arrays bisher eigentlich immer gerne als Felder der Form selbst deklariert habe.

Nun aber habe ich mal ein paar größere davon in einer Procedure deklariert und bin jetzt irgendwie an der Frage hängengeblieben, ob der von ihnen belegte Speicherplatz am Ende der Proc nicht eigentlich auch freigegeben werden müsste. Weil ähnlich wie bei StringListen, die Größe des von ihnen benötigten Speicherplatzes vorab ungewiss ist und dieser deswegen auch auf dem Heap verortet sein muss.

Und weswegen solche dynamischen Arrays also tatsächlich vorm Proc-Ende auch per SetLength(blabla_dynArray,0) freigegeben werden müssen?

bzw.

Und weswegen solche dynamischen Arrays, wenn sie als Felder im privat/public-Deklarationsteil der Form deklariert sind, dann also auch in "FormDestroy" freizugeben sind?

Thx im Voraus
rXdY

Geändert von r29d43 (16. Nov 2021 um 14:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#2

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?

  Alt 16. Nov 2021, 14:01
Dynamische Arrays sind ebenso wie Strings reference-counted. Sobald sie ihren Scope verlieren und keine andere Referenz mehr darauf existiert werden sie automatische freigegeben. Bei einer Methode, Procedure oder Function geschieht das beim Verlassen derselben. Bei Instanzen einer Klassen die Freigabe der Instanz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#3

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?

  Alt 16. Nov 2021, 15:49
Aber nicht vergessen den Inhalt des Array ggf. freizugeben just saying
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#4

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?

  Alt 16. Nov 2021, 16:16
Aber nicht vergessen den Inhalt des Array ggf. freizugeben
Du meinst Objektinstanzen? Denn für Interfaces, Strings oder dynamische Arrays wird das auch automatisch erledigt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#5

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?

  Alt 17. Nov 2021, 07:14
Aber nicht vergessen den Inhalt des Array ggf. freizugeben
Du meinst Objektinstanzen? Denn für Interfaces, Strings oder dynamische Arrays wird das auch automatisch erledigt.
Exakt! Deswegen das "ggf." ... Obwohl ich zugeben muss, dass ich mich mit dieser Interface-Geschichte und dem automatischen Freigeben dort echt schwer tue. Aber das ist eine andere Geschichte. 😅
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:04 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