![]() |
EInvalidPointer - Ungültige Zeigeroperation
Hallo,
wie kann es sein, daß es beim Konstrukt
Delphi-Quellcode:
bei Form2.Free manchmal zu einer EInvalidPointer-Exception kommt?Form2:=TForm2.Create(application); Try Form2.Showmodal; Finally Form2.free; End; Gruß Micha |
Re: EInvalidPointer - Ungültige Zeigeroperation
Wenn ein Owner angegeben wird, kümmert der sich auch um das Freigeben.
|
Re: EInvalidPointer - Ungültige Zeigeroperation
Und warum sollte das die Application nur manchmal machen? Besonders während das Programm noch läuft ...
Gruß Micha |
Re: EInvalidPointer - Ungültige Zeigeroperation
Nun weiß ich nicht, wie die Mechanismen dahinter genauer sind, da ich mich da mehr in C/Java auskenne. Aber wenn dort auch eine Art Garbage-Collector benutzt wird kann es natürlich sein, dass nach dem Zurückkehren aus ShowModal manchmal dein Programm schneller im entfernen ist, als der Garbage Collector.
Aber ich glaube mich zu entsinnen, das bei Angabe eines Parents dieser erst nach Zerstörung seinerselbst alle ihm zugeordneten Child-Elemente zerstört. |
Re: EInvalidPointer - Ungültige Zeigeroperation
Der Meinung bin ich eben auch - deshalb find ich die Meldung etwas seltsam.
|
Re: EInvalidPointer - Ungültige Zeigeroperation
passiert das auch, wenn du nun statt des application ein nil übergibst?
eventuell liegt es ja auch an was anderem :gruebel: PS:
Delphi-Quellcode:
allerdings wird dieses nicht wieder entfernt, was du selber machen müßtest
constructor TComponent.Create(AOwner: TComponent);
begin FComponentStyle := [csInheritable]; if AOwner <> nil then AOwner.InsertComponent(Self); end; (denn wenn jetzt Application mal seine Child-Liste durchgeht und seine Kinder etwas fragen will, dann knallt es schonmal, wenn ein Kind plötzlich einfach so fehlt, es aber nicht bescheidgesagt hat)
Delphi-Quellcode:
oder eben
Form2:=TForm2.Create(application);
Try Form2.Showmodal; Finally Application.RemoveComponent(Form2); Form2.free; End;
Delphi-Quellcode:
[add]
Form2:=TForm2.Create(nil);
Try Form2.Showmodal; Finally Form2.free; End; ich seh grad ... im Destructor :gruebel:
Delphi-Quellcode:
if FOwner <> nil then FOwner.RemoveComponent(Self);
|
Re: EInvalidPointer - Ungültige Zeigeroperation
Die Exception trat heut zum ersten Mal auf (nach 3 Monaten), da ist es schwer festzustellen, ob sie mit einem nil als Owner nicht aufgetreten wäre - jetzt funktionierts ja wieder alles ohne Probleme. Zumal ich immer die Application als Owner verwende und mir bei diesem Konstrukt noch nie ne Exception an dieser Stelle untergekommen ist. Vielleicht lag das Problem ja wirklich wo anders - nur wo?
Edit: Ich werde es mal mit Deinem Konstrukt probieren und sehen ob der Fehler wieder auftritt. Danke. Gruß Micha |
Re: EInvalidPointer - Ungültige Zeigeroperation
Wer weiß, was da an der Speicherstelle passiert ist und in dem Moment wirklich gestanden hat. Ich übergebe auch immer Self als Parameter und hab damit noch nie Probleme gehabt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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 by Thomas Breitkreuz