ungültige Zeigeroperation bei destroy
hallo,
ich hab den oben genannten fehler. zum Programm: es ist eine exe welche ein Form aus einer dll läd. in der dll habe ich zwei Klassen deklariert: eine Listenklasse welche Instanzen der anderen klasse enthält. wenn ich diese Klasse freigebe wird für jeder Instanz die sie enthält free aufgerufen. das klappt bei allen bis auf eine Instanz. bei dieser wird im destruktor der oben genannte fehler ausgegeben (und zwar zwischen dem letzten befehl und end;)
Code:
destructor myclass.Destroy;
begin ... dummybefehl; // wenn ich hier einen Schritt weiter gehe kommt der Fehler end;
Code:
sharemem hab ich schon probiert, sowol nur in der dll als auch in der exe oder in beiden, hat nichts geändert.
type
myclass=class; ... end; type mylist=class private list: array of TMyClass; ... end; alles was ich free gebe setze ich hinterher auch nil. jemand ne Ahnung? Danke. |
Re: ungültige Zeigeroperation bei destroy
Moin!
Bei dem Code:
Delphi-Quellcode:
Wo kommt da das Inherited Destroy? Vor oder nach dem DummyBefehl??
destructor myclass.Destroy;
begin ... dummybefehl; // wenn ich hier einen Schritt weiter gehe kommt der Fehler end; MfG Muetze1 |
Re: ungültige Zeigeroperation bei destroy
und wie sieht dummybefehl aus?
|
Re: ungültige Zeigeroperation bei destroy
das inherited Destroy kommt nach dem dummybefehl
ich wollt damit nur ausdrücken das es egal ist welchen Befehl ich als letztes aufrufe. Der Fehler kommt immer wenn ich ein Befehl weiter gehe, also zum end; |
Re: ungültige Zeigeroperation bei destroy
Sowas passiert, wenn die Instanz 2x freigegeben wird, und im Destruktor z.B. Felder der Klasse Bezug genommen wird. Mir ist noch nicht aufgefallen, das das beim Return (also dem 'end') auch auftritt, aber wer weiss.
Beispiel:
Delphi-Quellcode:
Abhilfe: Vermeiden von Destroy, und Benutzen der Routine FreeAndNil.
a := TFooBar.Create;
... a.Destroy; a.Destroy; // <--- Oha
Delphi-Quellcode:
a := TFooBar.Create;
... FreeAndNil(a); a.Free; // <--- Macht nix, weil <Nil>.Free gar nichts macht. |
Re: ungültige Zeigeroperation bei destroy
Moin!
Zitat:
Warnung hast du auch keine und Destroy ordentlich mit Override überschrieben? MfG Muetze1 |
Re: ungültige Zeigeroperation bei destroy
@alzaimar
freeandnil() müstte doch dasselbe sein wie meinobject.free; meinobject := nil; oder? @Muetze1 - Ja ich räume vor inherited destroy auf - TObjectlist: wenn ich auf die Memberfunktionen zugreifen will muss ich immer soviel Casten und die Listenklasse kann noch ein wenig mehr als nur objekte verwalten. - destroy habe ich mit override überschrieben. das Problem tritt ja auch nur bei einem element auf, alle anderen werden problemlos destroyt kann das was mit der dll zutun haben? Instanzen der klassen Verlassen die dll jedoch nie, spielt sich alles inerhalb der dll ab.(also create und destroy) |
Re: ungültige Zeigeroperation bei destroy
Es kann auch an deiner Prozedur im destructor sein, aber da du sie ja nicht zeigen willst...
|
Re: ungültige Zeigeroperation bei destroy
Code:
ich habe auf dem nächstem behehl nach dem Rücksprung ein breakpoint, jedoch kommt er da nie hin???
destructor MyClass.Destroy;
begin comp.free; // ist ein TEdit comp:=nil; complabel.free; //ist ein TLabel complabel := nil; DataStream.Position :=0; DataStream.free; Datastream := nil; inherited Destroy; end; so ich habs jetzt mal ohne dll getestet, da funktioniert alles ohne Probleme ich brauchs aber in der dll?? |
Re: ungültige Zeigeroperation bei destroy
FreeAndNil = a.free; a:=Nil--- korrekt.
Wenn es nur in der DLL wegballert, vielleicht hast Du irgendwo strings? Du kennst doch das Problem mit der Strings-Verwaltung und DLL? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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