Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unerklärliche EAccessViolation am Ende einer Prozedur!? (https://www.delphipraxis.net/97246-unerklaerliche-eaccessviolation-am-ende-einer-prozedur.html)

milchschnitte 7. Aug 2007 15:33


Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
Ja hallo, ich hab ein mir unerklärliches Problem mit Delphi 6.. :?

Ich habe, grob gesagt, mehrere dynamisch erzeugte Buttons mit derselben OnClick-Prozedur. Die Buttons sollen halt Einträge in einer Liste löschen. Ist aber eigentlich auch irrelevant.

Nun tritt manchmal (abhängig davon, in welcher Reihenfolge ich die Listeneinträge lösche!) eine EAccesViolation beim Klicken des Buttons auf.

Kein Problem denk ich mir, ich setze also einen Haltepunkt an das "begin" der OnClick-Prozedur.

Ergebnis: Die gesamte Prozedur läuft ohne Probleme durch! Erst wenn ich am "end;" der Prozedur angelangt bin, und fortfahren will, erscheint die Exception.. Dabei ist die Prozedur doch schon beendet!? Der "Zeiger" im Quelltext springt dann auf das "end." des Projekt-Quellcodes.

Woran könnte das liegen!? Was passiert beim Beenden einer OnClick-Prozedur, das eventuell den Fehler auslösen könnte?

Der Button, auf den ich klicke, wird in der OnClick-Prozedur gelöscht (halt dynamisch erstellt). Das dürfte allerdings auch kein Problem sein, da es ja in den meisten Fällen funktioniert..

[edit] Hier noch die gesamte Fehlermeldung:
Project termine.exe raised exception class EAccessViolation with message 'Access violation at address 004039B5 in module 'termine.exe'. Read of address 00000028'. Process stopped. Use Step or Run to continue.

Bernhard Geyer 7. Aug 2007 15:36

Re: Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
Zitat:

Zitat von milchschnitte
Der Button, auf den ich klicke, wird in der OnClick-Prozedur gelöscht (halt dynamisch erstellt). Das dürfte allerdings auch kein Problem sein, da es ja in den meisten Fällen funktioniert..

Autsch! Genau das ist das problem weil du die im Aurufstack verwendeten Objekte freigibst und je nachdem ob der Speicher beim Zurückspringen durch den Stack noch unzerstört (überschrieben) ist es klappt oder auch nicht.

Lösche niemals Objekte in deren Eventhandler du dich gerade befindest! :warn: :warn: :warn:

milchschnitte 7. Aug 2007 15:52

Re: Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
ah also liegt es doch daran.. Super, danke für die Antwort :-D

Wie krieg ich das denn dan am besten hin, die Buttons zu löschen, wenn ich auf sie drauf klicke?

Erstmal invisible und dann nen Timer einbauen, der nach nicht mehr benutzten Buttons sucht und sie in die Pfanne haut? Geht doch sicherlich eleganter oder? :?

Hawkeye219 7. Aug 2007 16:00

Re: Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
Hallo,

xaromz hat das in diesem Beitrag beschrieben.

Gruß Hawkeye

sirius 7. Aug 2007 16:02

Re: Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
Ich würde "PostMessage" vorschlagen. Damit kannst du eine beliebige Nachricht (2 x 32bit) an dein Fenster senden und die Nachricht wird erst abgearbeitet, wenn die davor fertig (also dein Buttonclick) ist.

shmia 7. Aug 2007 16:14

Re: Unerklärliche EAccessViolation am Ende einer Prozedur!?
 
Code-Library: Controls, die sich selbst zerstören


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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