AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperation
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperation

Ein Thema von guitar1 · begonnen am 8. Mär 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#1

TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperation

  Alt 8. Mär 2008, 15:45
Hi,

ich hab eine von TObjectList abgeleitete Klasse, in der ich die procedure Clear übernommen habe, wenn ich nun - um ein neues "Dokument" zu öffnen - MeineListe.Clear schreibe, so funktioniert dies das erste mal super, wenn ich dann wieder etwas in das "Dokument" schreibe und erneut MeieListe.Clear ausführe kommt eine Fehlermeldung vom Typ "ungültige Zeigeroperation".

Was ist das denn für eine Logik? Beim erste mal klappts und danach nicht mehr?! Was kann ich den dagegen tun, bzw. ist jemandem dieses Problem bekannt?

grüße
guitar1
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:29
Was genau hast du denn überschrieben? Zeig uns am Besten den gesamten Code der Klasse.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:36
Delphi-Quellcode:
TTermteilList = class(TObject)
    private
      FItems: TObjectList;
      function GetItem(const Index: Integer): TTermteil;
    public
      constructor Create(const OwnsObjects: Boolean = true);
      destructor Destroy; override;

      function Add(const ATermTeil: TTermteil): Integer;
      function Count:Integer;
      procedure Delete(Index: Integer);
      procedure Insert(Index: Integer; ATermTeil: TTermteil);
      procedure Clear;

      property Items[const Index: Integer]: TTermTeil read GetItem; default;
  end;

implementation

// ----- PRIVATE -----
function TTermteilList.GetItem(const Index: Integer): TTermteil;
begin
  result:= TTermteil(FItems[Index]);
end;

// ----- PUBLIC -----
constructor TTermteilList.Create(const OwnsObjects: Boolean = True);
begin
  inherited Create;

  FItems:= TObjectList.Create(OwnsObjects);
end;

destructor TTermteilList.Destroy;
begin
  FItems.Free;

  inherited Destroy;
end;

function TTermteilList.Add(const ATermTeil: TTermteil): Integer;
begin
  TTermteil(FItems.Add(ATermTeil));
end;

function TTermteilList.Count:Integer;
begin
  result:= FItems.Count;
end;

procedure TTermteilList.Delete(Index: Integer);
begin
  FItems.Delete(Index);
end;

procedure TTermteilList.Insert(Index: Integer; ATermTeil: TTermteil);
begin
  FItems.Insert(Index, TTermteil(ATermTeil));
end;

procedure TTermteilList.Clear;
begin
  FItems.Clear;
end;
so schaut das aus, ich habs an Hand eines Beispiels gemacht wie ich es hier in der DP gesehn hatte.
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:41
Delphi-Quellcode:
function TTermteilList.Add(const ATermTeil: TTermteil): Integer;
begin
  Result := FItems.Add(ATermTeil);
end;

procedure TTermteilList.Insert(Index: Integer; ATermTeil: TTermteil);
begin
  FItems.Insert(Index, ATermTeil);
end;
mal verbessern und schauen, was passiert!
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:52
okay, ich hab das jetzt geändert und alles läuft noch xD, aber an meinem ursprünglichen Problem hat das leider nichts geändert ?! Aber danke für die Korrektur!
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:55
Die beiden Typecasts sind irrelevant, aber die Warnung der Add Methode hättest du auch selber ausmerzen können, schliesslich weist dich der Compiler darauf hin (Rückgabewert könnte undefiniert sein).

Ich vermute eher ein Problem, dass du die Objekte die du ablegst (die TTermteil Instanzen) noch irgendwo anders hälst und nicht daran denkst, dass alle Instanzen freigegeben werden bei einem Clear (aussern du hast im Create deiner Klasse explizit false angegeben.
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 16:57
Der Fehler konnte auch nicht daran liegen, ev. hätte das Result von Add gesponnen. Meine Glaskugel sagt mir, Indexfehler in dynamischen Arraysm der sich dann auf diese Klasse auswirkt.
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 17:05
Also wenn ich "OwnsObjects: Boolean = false" nehme dann gehts , aber ich habe irgentwo mal gehört das sollte man besser nicht tun da dann der Speicher nicht mehr richtig freigegeben wird?!

edit2: das 1. edit wieder löschen weils dumm war
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 18:15
Zitat von guitar1:
Also wenn ich "OwnsObjects: Boolean = false" nehme dann gehts , aber ich habe irgentwo mal gehört das sollte man besser nicht tun da dann der Speicher nicht mehr richtig freigegeben wird?!
Dann gibst du wohl deine TTermteil irgendwo anders (evtl. TForm als Parent im Konstructor oder ähnliches?) wieder frei.

Wie der Name nahelegt sollte man OwnsObjects nicht verwenden wenn die Einträge in der List irgendwo anders speichertechnisch verwaltet werden und dann dort freigegeben werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: TObjectList.Clear, beim 2. Aufruf ungültige Zeigeroperat

  Alt 8. Mär 2008, 18:23
AHA okay, ich hab als parent immer TForm, dann hat sich das ja auch erledigt

Vielen Dank an alle!!
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:44 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