AGB  ·  Datenschutz  ·  Impressum  







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

Interessantes Destruktor Problem

Ein Thema von sx2008 · begonnen am 7. Jan 2011 · letzter Beitrag vom 7. Jan 2011
 
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

Interessantes Destruktor Problem

  Alt 7. Jan 2011, 08:15
Delphi-Version: 5
Dieser Thread ist ein Spin-Off von Delphi Kurzreferenz

Dort hat Deep Sea folgenden Code gepostet:
Delphi-Quellcode:
constructor TAbgeleiteteKlasse.Create;
begin
  FStream := TMemoryStream.Create;
  inherited Create(FStream);
end;

destructor TAbgeleiteteKlasse.Destroy;
begin
  inherited; // Könnte ja auf den übergebenen Stream noch zugreifen.
  FStream.Free;
end;
Auf den ersten Bick sieht der Code korrekt aus, aber er trägt eine Zeitbombe in sich.
Nach dem Aufruf von inherited im Destruktor in der gesamte Speicher des Objekts freigegeben.
Es ist daher verboten nach diesem Zeitpunkt auf FStream zuzugreifen.
Das MemoryStream-Objekt selbst ist zwar noch intakt, aber die Variable FStream ist nicht mehr gültig.

In den allermeisten Fällen geht ein Zugriff auf diesen freigegebenen Speicher glimpflich ab.
Wenn man allerdings einen Memory-Manager (FasttMM4) benützt und dieser den freigegebenen Speicher
mit bestimmten Gardbytes füllt, dann wird das Problem offensichtlich.
Oder wenn ein anderer Thread zufällig gerade den Speicher bekommt der soeben im Destruktor freigegeben wurde dann gibt das ganz bösartige Probleme.

Ich behaupte also man darf so wie oben nicht programmieren und lade jeden ein sich zu überlegen, wie man das Problem umgehen könnte.

Geändert von sx2008 ( 7. Jan 2011 um 08:21 Uhr)
  Mit Zitat antworten Zitat
 


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:42 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 by Thomas Breitkreuz