![]() |
Frage zu möglichem Memory-Leak
Hallo zusammen,
Ich habe folgende Struktur:
Delphi-Quellcode:
Wenn ich nun zur Laufzeit das dynamische Array so initialisiere:
TData = record
Size: Integer; Info: TMemoryStream; end; TDataArray = array of TData;
Delphi-Quellcode:
reicht es dann zum "Aufräumen" aus, einfach das dyn. Array mit SetLength(DataArray,0) zu entsorgen oder muss vielmehr auch noch vorher für jedes Arrayfeld ein DataArray[n].Info.Free erfolgen?
SetLength(DataArray,1);
DataArray[0].Size := 0; DataArray[0].Info := TMemoryStream.Create; .sundance. |
Re: Frage zu möglichem Memory-Leak
Zitat:
Zitat:
|
Re: Frage zu möglichem Memory-Leak
Vielen Dank Bernhard,
ich war mir auch fast sicher, dass die Streams vorher versorgt werden müssen. Ich kann mich nur irgendwie erinnern, dass ich mal was gelesen habe, dass Delphi seine "eigenen" Objekte bei so einer Aktion selbst versorgt... aber wahrscheinlich ging es dabei um sowas wie Strings (für die der Anwender ja auch nicht explizit ein Create braucht). .sundance. |
Re: Frage zu möglichem Memory-Leak
TMemoryStream ist ein Objekt und diese werden nie automatisch "entsorgt".
(wenn du dir also auf dem MemoryStream ein Interface machst, dann ginge es) Es ist praktisch so ... alles was man erstellt sollte man auch wieder freigeben. Strings (Ansi/Wide/Unicode), DynArrays und Interfaces werden von Delphi automatisch initialisiert und auch wieder automatisch freigegeben (wenn man dieses nicht explizit umgeht ... z.B. via GetMem und FreeMem, in Verbindung mit Records, aber dafür gibt es ja auch New und Dispose). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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