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
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#1

Zugriffsverletzung bei TObjectlist.delete

  Alt 19. Mär 2007, 23:42
Hallo Leute,
ich habe irgendwie ein kleines Problem beim Löschen aus meiner TOjectlist. Rufe ich im Destructor das Delete auf, bekomme ich eine Zugriffsverletzung. Ersezte ich delete durch free (ohne Schleife) bekomme ich den gleichen Fehler. Ich blicks irgendwie nicht.

Dankbar für jeden Tip.

Delphi-Quellcode:
type TStreamlist= class (TObjectlist)
private
   FStreamObjectList:TObjectlist;
.....
constructor TStreamlist.create;
begin;
  inherited create;
  FStreamObjectList:=TObjectList.Create(true);
end;

destructor TStreamlist.destroy;
begin;
     while FStreamObjectList.Count>0 do
     begin
         FStreamObjectList.delete(0); {Zugriffsverletzung}
     end;
    inherited Destroy;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 00:10
1. Du machst es dir zu Kompliziert, wenn QwnObjects der TObjectList noch auf True ist (Standard) dann recht ein Clear aus, bzw. ein zerstören der Liste selber, diese gibt dann alle Objecte frei...

2. Wäre eine rückwärts laufende For-Sschleife bei weitem schneller...

3. Die Exception kommt aus dem Destructor des Objetes welches du da versuchst freizugeben... (denk ich, also durchlauf ihn mal mit dem Debugger...)

Bye Christian

Edit: Wie ich sehe, erstellst du die Liste sogar explezit nochmal mit OwnsObjects := True;, vondaher kannst du dir deinen ganzen Code da im destructor sparen, wenn du dir mal die Vorfahren deiner Liste anschaust, wirst du sehen, dass diese alle Objecte freigibt...

Ansatzpunkt wie gehabt Punkt 3.
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 00:39
Zitat von Kedariodakon:
2. Wäre eine rückwärts laufende For-Sschleife bei weitem schneller...
Das optimiert Delphi von alleine.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 01:14
Ok so genau weiß ich das nicht, hab auch gerade keine Lust zu schaun, was Delphi daraus macht...
Aber rein ausm Gedächniss sollte die schon schneller sein und nicht den selben Code ausspucken.. =p

Bye Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 07:21
Warum leitest Du von TObjectList ab und erstellst dann in der Klasse noch eine TOBjectList (FStreamObjectList)
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#6

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 08:06
Hallo zusammen,
Vielen Dank für die Tips.
ich habe noch etwas ausprobiert und dabei festgestellt, das mein FStreamObjectList.Count sinnvolle Werte enthält, aber ich immer noch eine Zugriffsverletzung bekomme,wenn ich FREE oder Delete oder Clear verwende.Ich dachte, ich gebe das Object an einer anderen Stelle schon frei. Finden konnte ich es bisher noch nicht. Kann es noch etwas anderes sein?


@Kedariodakon,
Danke dür die Erklärung. Ich habe es mal mit Clear, Free probiert. Der Fehler ist jedoch noch der gleiche. siehe oben!


@Jelly
Du hast natürich Recht. Kleiner Schnitzer.
  Mit Zitat antworten Zitat
Muehle

Registriert seit: 24. Nov 2006
Ort: 92331 Parsberg
24 Beiträge
 
Delphi 2005 Architect
 
#7

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 08:25
probiers mal damit (duerfte unabh. von der OwnObjects-Eigenschaft fkt.) :

destructor TStreamlist.destroy;
begin;
for i = 1 to FStreamObjectList.Count do
begin
FStreamObjectList.Items[i-1].free // jedes einzelne Objekt expl. freigeben
end;
FStreamObjectList.Clear(); // jetzt duerften nur noch nils da sein
inherited Destroy; // und zum Schluss noch das Basisdestroy

end;
G.M.
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 08:44
Zitat von ozz:
Ich dachte, ich gebe das Object an einer anderen Stelle schon frei. Finden konnte ich es bisher noch nicht. Kann es noch etwas anderes sein?
Auf die Schnelle überlegt: Eigentlich nicht.

In jedem Falle sollte dein TStreamlist-Destruktor die Liste FStreamObjectList selbst überhaupt auch mal freigeben. Diese Anforderung, gemeinsam mit der Tatsache, dass OwnsObjects TRUE ist, sollte folgendes ausreichen lassen:
Delphi-Quellcode:
destructor TStreamlist.destroy;
begin
    FStreamObjectList.Free;
    inherited Destroy;
end;
Ob dabei jettz noch der Fehler auftaucht, musst du mal gucken. Vielleicht ist die Auto-Freigabe der Liste auch so schlau und ignoriert irgendwie tote Referenzen (z.B. durch Abfangen der Execption). Das weiß ich jetzt nicht.

Zitat von ozz:
@Jelly
Du hast natürich Recht. Kleiner Schnitzer.
Soooo natürlich ist das nun auch wieder nicht. Warum sollte eine Ableitung einer Liste nicht noch eine weitere Liste besitzen?

Aber wenn das jetzt geändert wurde, sieht die Geschichte ja völlig anders aus.

@ozz
Du solltest nochmal den jetzt aktuellen Code einstellen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 09:00
Hallo,
Zitat von ozz:
Ich dachte, ich gebe das Object an einer anderen Stelle schon frei. Finden konnte ich es bisher noch nicht.
vielleicht wurden die Objekte bereits automatisch freigegeben. TWinControls geben im Destruktor alle Controls frei, deren Parent sie sind.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 09:10
Welchen Destructor versucht er dann da aufzurufen? (Meine Glass versteckt sich schon seit gestern Abend...)
Was speicherst du in die Liste?


Bye Christian
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 05:55 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