Einzelnen Beitrag anzeigen

Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Zugriffsverletzung nach Objektzerstörung innerhalb Thread

  Alt 30. Nov 2006, 18:10
Ok, nachdem ich schon seit längerem an einem wiederkehrenden Fehler hänge, folgende Situation:

1) Ich übergebe einem Thread eine Objektliste
2) Thread holt sich erstes Objekt aus der Liste und tut etwas damit
3) Objekt wird mittels .free anschließend gelöscht
4) Der Thread wird beendet und die Anwendung läuft ohne Probleme weiter
5) Beim Schließen der Anwendung kommt der Crash (Zugriffsverletzung bei Adresse 00000000)

Arbeite ich dieselbe Objektliste ohne Thread durch, entsteht kein Fehler.
Es entseht ebenfalls keine Fehlermeldung, wenn ich dieses Objekt nicht zerstöre - aber es hängt ja noch im Speicher...

Die Objektliste habe ich so erstellt, dass sie nicht selbst die Objekte freigeben soll,
wenn die Liste geleert wird.


Gibt es grundsätzlich Beschränkungen, wenn man ein Objekt innerhalb eines Threads löschen will?
Wahrscheinlich doch nur, hinsichtlich Mehrfachzugriff, oder?

Zugriffsverletzung bei Adresse 00000000 heißt doch, dass ein Objektzeiger bereits auf NIL steht und ich trotzdem darauf zugreifen möchte, oder?


Vielleicht habt ihr ja noch Gedanken dazu, die ihr loswerden wollt,


Folgende Anmerkunge möchte ich noch machen:

Es sind Objekte, die von TObject abgeleitet sind.

Die Objekte, die ich freigeben will, sind wiederum abgeleitet.
Freigegeben wird mit Hilfe des Ursprungsobjektes, also so:
Delphi-Quellcode:
Type
  TElternObjekt = class
  end;
  
  TKindObjekt = class(TElternObjekt)
  end;

 
KindObjekt:= TKindObjekt.Create;

{ ... tue was damit ... }

{ Jetzt freigeben über TElternobjekt }

TElternObjekt(KindObjekt).free;
Aber wenn das nicht gültig wäre, wieso funktioniert es dann ohne Thread-Umgebung?

Dank und Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat