AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu möglichem Memory-Leak

Ein Thema von sundance · begonnen am 21. Dez 2009 · letzter Beitrag vom 21. Dez 2009
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Frage zu möglichem Memory-Leak

  Alt 21. Dez 2009, 08:43
Hallo zusammen,

Ich habe folgende Struktur:
Delphi-Quellcode:
TData = record
  Size: Integer;
  Info: TMemoryStream;
end;

TDataArray = array of TData;
Wenn ich nun zur Laufzeit das dynamische Array so initialisiere:
Delphi-Quellcode:
SetLength(DataArray,1);
DataArray[0].Size := 0;
DataArray[0].Info := TMemoryStream.Create;
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?

.sundance.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Frage zu möglichem Memory-Leak

  Alt 21. Dez 2009, 08:49
Zitat von sundance:
reicht es dann zum "Aufräumen" aus, einfach das dyn. Array mit SetLength(DataArray,0) zu entsorgen


Zitat von sundance:
oder muss vielmehr auch noch vorher für jedes Arrayfeld ein DataArray[n].Info.Free erfolgen?
Ja
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#3

Re: Frage zu möglichem Memory-Leak

  Alt 21. Dez 2009, 09:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Frage zu möglichem Memory-Leak

  Alt 21. Dez 2009, 09:34
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).
$2B or not $2B
  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 17:39 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