![]() |
Delphi-Version: 7
Zugriffsverletzung beim Beenden
Hiho,
beim beenden der anwendung (gestartet in der IDE) erfolgt eine Fehlermeldung: Im Projekt ist eine Exception der Klasse EAccessViolation Zugriffsverletzung bei Adresse 005CE844 im Modul... Schreiben von Adresse 000001AC... Wo knallts, kann das jemand herauslesen aus der Meldung??? |
AW: Zugriffsverletzung beim Beenden
Nein, weil die Adresse ja variiert. Hast du mal versucht die Anwendung zu debuggen, um zu sehen, wo der Fehler genau auftritt?
Tritt der Fehler auch ausserhalb der IDE auf? |
AW: Zugriffsverletzung beim Beenden
Ja der tritt auch ausserhalb auf. Allerdings kommt nur die Problembericht Faselei.
Hab ich versucht, aber nach der Fehlermeldung kann ich nur per StrgF2 beenden. |
AW: Zugriffsverletzung beim Beenden
Das CPU Fenster zeigt eine Zeile in TButton.Notification.
Wird evtl. die Komponente nicht freigegeben? |
AW: Zugriffsverletzung beim Beenden
MessageBox(Null oder Handle,'Bin bis hierher gekommen #001'','Kein Fehler',mb_Ok or mb_IconInformation or mb_DefButton1);
|
AW: Zugriffsverletzung beim Beenden
Oder halt mit dem Debugger Schritt für Schritt den Code durchgehen
|
AW: Zugriffsverletzung beim Beenden
Ok Danke,
noch ne Idee zum CPU Fenster? Wenn es in der Button Notification hängen bleibt? |
AW: Zugriffsverletzung beim Beenden
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal Screenshot vom CPU Fenster gemacht
|
AW: Zugriffsverletzung beim Beenden
Befindet sich ein Popupmenü o.ä. auf der Form oder ein TDBButton?
|
AW: Zugriffsverletzung beim Beenden
Gibst du zufällig einen im designer erzeugten Buton frei?
Ansonsten das Projekt neu erstellen. Wenn es dann immernoch nicht geht hilft nur den Code im Einmzelschritt zu durchlaufen. Es kommt natürlich darauf an,ob die Exception im VCL-Code auftritt, oder in deinem eigenen: Tritt er im VCL-Code auf, hast du zu 99,9% irgendwo etwas freigegeben, was du nicht freigeben sollst. |
AW: Zugriffsverletzung beim Beenden
Ok Danke Leute
Ich werde das mal prüfen. Ja mit hoher wahrscheinlichkeit betrifft Buttons die zur Laufzeit generiert wurden. Obendrein sind Jedi Buttons. Aber damit gabs noch nie Probleme.... |
AW: Zugriffsverletzung beim Beenden
Tcontrol.Notification betrifft die Freigabe, von abhängigen Komponenten
|
AW: Zugriffsverletzung beim Beenden
Danke Markus,
was bedeutet das nun für mich. Werden Komponenten in falscher Reihenfolge freigegeben? Beispielsweise wird in meinem Fall zur Laufzeit mehrere Buttons erzeugt. Bisher gabs damit aber noch Probleme. Normalerweise müsste das doch alles selbstständig wieder freigegeben werden. |
AW: Zugriffsverletzung beim Beenden
"Von Selbst" werden die nur freigegeben, wenn ein entsprechender Owner gesetzt wurde.
Damit übergibst du die Speicherverwaltung für diese Komponente an den Owner ab. Diese darfst du nun nicht mehr selber freigeben! Sonst knallt es.
Delphi-Quellcode:
TButton.Create( MyForm ); // MyForm kümmert sich um das Freigeben
TButton.Create( nil ); // Niemand kümmert sich um das Freigeben, darum irgendwann selber freigeben |
AW: Zugriffsverletzung beim Beenden
Meiner Meinung ist der richtige Owner gesetzt.
Zitat:
wie kann ich nun herausfinden obs bei diesen Buttons knallt oder doch bei einem anderen? |
AW: Zugriffsverletzung beim Beenden
Gib doch einmal nil als Owner an.
|
AW: Zugriffsverletzung beim Beenden
Ich habe mal einen Haltepunkt ans FormClose geheftet.
Alle Proceduren werden bis zum Schluss abgearbeitet, der letzte Punkt ist die Programm Datei letzte Zeile: Zitat:
|
AW: Zugriffsverletzung beim Beenden
Wurde hier ja schon erwähnt, Du gibst ein Objekt manuell frei, dass eigentlich durch einen Owner freigegeben würde (der Zugriff auf ein bereits freigegebenes Objekt löst den Fehler aus).
Alternativ greifst Du in einer OnDestroy-Methode nochmal auf ein bereits freigegebenes Objekt zu. *** Ich würde alle manuellen Freigaben bei Programm-Ende ausklammern, ReportMemoryLeaksOnShutdown auf True setzen und damit prüfen, was ich wirklich selber freigeben muss. (Alternativ FastMM4, wenn TDE das noch nicht kennt) |
AW: Zugriffsverletzung beim Beenden
Danke an alle,
nach langem suchen hab ich nun rausgefunden, dass es an einem Glyph lag. Vielen Dank nochmal |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 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