AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriffsverletzung bei TObjectlist.delete
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei TObjectlist.delete

Ein Thema von ozz · begonnen am 19. Mär 2007 · letzter Beitrag vom 23. Mär 2007
 
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
112 Beiträge
 
Delphi 12 Athens
 
#34

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 22. Mär 2007, 18:39
Hallo,

ich hab' jetzt nicht alle Antworten gelesen und weiß auch nicht, was dieses Konstrukt genau anstellen soll. Aber das hier springt mir doch ins Auge:
Zitat von ozz:
Delphi-Quellcode:
procedure TStreamlist.clear;
begin
 while FStreamObjectList.Count >0 do
 begin
   FStreamObjectList.Delete(0);
 end;
end;
Warum machst Du nicht einfach folgendes:
Delphi-Quellcode:
procedure TStreamlist.clear;
begin
  FStreamObjectList.Clear;
end;
Das löscht ebenfalls alle Objekte in FStreamObjectList. Und da FStreamObjectList der Eigentümer aller enthaltener Objekte ist, werden diese alle auch vorher brav mit Free freigegeben.

Wenn Du das -- aus irgend einem Grund -- trotzdem "von Hand" machen möchtest, dann musst Du nach dem Free() den Eintrag in der Liste auf NIL setzen. Der nachfolgende Aufruf von Clear() durchläuft ja intern noch einmal die Liste und versucht, die Items freizugeben... *Bumm*. Dass die Items von Dir schon freigeben wurden, kann die Liste ja nicht wissen.

Delphi-Quellcode:
destructor TStreamlist.destroy;
var i:Integer;
begin;
  for i:= FStreamObjectList.Count-1 downto 0 do // Rückwärts laufen
  begin
    FStreamObjectList.Items[i].free // jedes einzelne Objekt expl. freigeben
    FStreamObjectList.Items[i] := nil; // Referenz entfernen!!!
  end;
  FStreamObjectList.Clear(); // Alle Items entfernen.
  inherited Destroy; // und zum Schluss noch das Basisdestroy
Aber wie schon geschrieben: Der ganze Code ist hyperfluid: TObjectList.Clear() macht das alles schon intern!

Achim
Achim
  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 12:31 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