Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Delphi: Muss ein Image im Array mit free freigegeben werden?

Empfohlene Antworten

Veröffentlicht

Hallo,

ich erstelle in einem Array für TImages wärend des Programmablaufs mehrere Images. Werden diese Images nicht mehr gebraucht, dann muss man sie ja bekanntlicherweise mit free wieder freigeben, weil sonst Arbeitsspeicher verbraucht wird.

Mit dem Befehl

SetLength(Dyn_Image, 0); kann man die Anzahl der Images im Array wieder auf 0 setzen.

Muss man die Images vorher trotzdem mit free freigeben?

Was in der Delphi Hilfe steht ist mir nicht ganz eindeutig klar :

Bei einer langen String- oder einer dynamischen Array-Variable weist SetLength dem mit S referenzierten String oder Array die angegebene Länge zu. Dabei bleiben die Zeichen im String oder die Elemente im Array erhalten, jedoch ist der Inhalt des neu zugewiesenen Speicherbereichs nicht definiert. Ist nicht genug Speicher für die Variable vorhanden, wird eine EOutOfMemory-Exception ausgelöst. Nach dem Aufruf von SetLength ist sichergestellt, daß S auf einen eindeutigen String oder ein eindeutiges Array zeigt (d. h. dessen Referenzzähler den Wert Eins hat).

Original geschrieben von Chrischn2

Muss man die Images vorher trotzdem mit free freigeben?

Was in der Delphi Hilfe steht ist mir nicht ganz eindeutig klar :

Ja, im Arrray stehen ja nur Zeiger auf den Speicherbereich in dem das TImage Objekt abgelegt ist. Diese Pointer werden dadurch zwar nicht mehr zugänglich gemacht, der Speicher der hintendranhängt bleibt aber unverändert.

Also erst eine Schleife über das dyn. Array und alles freigeben, dann (u.U.) die Länge auf 0 setzen.

Als Grundregel kann man eigentlich immer nehmen:

Alles was du erzeugst, musst du auch wieder freigeben!

Natürlich gibt es da auch Ausnahmen (über die Owner Property), aber sicherer und besser ist es das selber zu machen (auch mit Owner). Die paar Zeilen machen dann auch nix mehr ;):D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.