![]() |
Bei FormClose Exception EInvalidPointer
Hallo
In Delphi7 Beim Schliessen einer VCL W32 Applikation mit FormClose bekomme ich folgendes Fehlerfenster: Im Projekt1.exe ist eine Exception der Klasse EInvalidPointer aufgetreten. Meldung: 'Ungültige Zeigeroperation'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. Vermutlich brauchen wir jetzt die Glaskugel. Aber vorab kann ich schon mal sagen, dass ich alle creierten Listen und FindFirst ... FindClose etc. abgeschlossen habe. Es handelt sich um ein Programm, welches ich vor 10 Jahren geschrieben habe und auch schon so lange lief. Vielleicht hat doch jemand eine Idee, wie dieser Fehler beim Schliessen des Programms entstehen kann. VG + VD EB |
AW: Bei FormClose Exception EInvalidPointer
Zitat:
Nach dem Knall gucken wo der Debugger stehen bleibt. Eventuell noch 1-2 Mal F1 gedrückt, ob man eine bessere Fehlerposition bekommt. (manchmal/oftmals wird direkt nach dem Knall eine "falsche" Position angezeigt) * manchmal = nicht ganz falsch, sondern nur zu weit im Stack zurück geschaut, weil durch Fehlerkennung keine frührere Code-Position gefunden wurde. ODER Haltepunkt auf den Beginn von FormClose und dann mit F7/F8 schauen, bis wo hin man kommt, bevor es knallt- |
AW: Bei FormClose Exception EInvalidPointer
Danke sehr.
Mit dem CPU Fenster kann ich nicht umgehen. Daher habe ich mit dem Breakpoint und F7 / F8 probiert. Er bleibt beim Schliessen Der Anwendung stehen. Daher habe ich in den Zeilen der Routine TForm1.FormClose debuggt.
Delphi-Quellcode:
In der vorletzten Zeile close; knallt es dann.
TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var I: integer; begin SL.Clear; Img.Free; SL.Free; SL1.Free; for i:= 0 to 99 do begin TSatz(SatzList.Items[i]).Free; end; SatzList.Free; Satz.Free; close; end; Soweit ich meinen Fehler beschreiben konnte. VG + VD EB |
AW: Bei FormClose Exception EInvalidPointer
Du bist doch schon im FormClose, wieso noch ein Close? Deine Listen sind weg, dadurch hast Du Dir wilde Zeiger gebaut, da die Variablen bzw. Felder jetzt auf freigegebenen Speicher zeigen. Kein Wunder, dass es knallt.
|
AW: Bei FormClose Exception EInvalidPointer
Soll heißen, dass dein OnClose doppelt ausgeführt wird und im zweiten Durchlauf knallt es.
Wo werden denn die Objekte erstellt? Das Gegenteil von OnCreate ist OnDestroy und nicht OnClose. Beim Constructor ist es der Desructor. -> Dinge immer in der selben Ebene freigeben, wo sie auch erstellt wurden. OnShow -> OnClose :stupid: PS: SL.Free macht auch ein Clear. SatzList ist eine TList? Warum keine TObjectList mit OwnsObjects=True? 99 = SatzList.Count-1 |
AW: Bei FormClose Exception EInvalidPointer
Das war's! Klasse! Danke!
VD + VG EB |
AW: Bei FormClose Exception EInvalidPointer
Müsste die Schleife nicht rückwärts laufen? :|
|
AW: Bei FormClose Exception EInvalidPointer
Ist egal, da hier nur die referenzierten Bilder in der Liste gelöscht werden, aber die Referenzen nicht aus der Liste.
Aber grundsätzlich lösche ich auch fast immer rückwärts, damit ich es im Zweiel mal nicht vergess'. Einer der Gründe, für die Frage nach der TObjectList. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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-2025 by Thomas Breitkreuz