22 Stimmen

Fehlersuche bei Zugriffsverletzungen?

Welche Tipps können Sie geben, um Zugriffsverletzungen beim Schreiben von Anwendungen in Delphi zu finden und zu beheben?

Ich glaube, Zugriffsverletzungen werden in der Regel durch den Versuch verursacht, auf etwas im Speicher zuzugreifen, das noch nicht erstellt wurde, wie z. B. ein Objekt usw.

Ich finde es schwierig herauszufinden, was die Zugriffsverletzungen auslöst und wo ich dann die erforderlichen Änderungen vornehmen kann, um sie zu stoppen/zu beheben.

Ein Beispiel ist ein persönliches Projekt, an dem ich gerade arbeite. Ich speichere in TTreeView Node.Data Eigenschaft einige Daten für jeden Knoten. Knoten können mehrfach ausgewählt und exportiert werden (der Export iteriert durch jeden ausgewählten Knoten und speichert bestimmte Daten in einer Textdatei - die in der Textdatei gespeicherten Informationen sind die, die in nodes.data gespeichert sind). Dateien können auch in den Treeview importiert werden (wobei der Inhalt der Textdateien in der Datei node.data gespeichert wird).

Das Problem in diesem Beispiel ist, dass es perfekt funktioniert, wenn ich Dateien in den Treeview importiere und sie dann exportiere. Wenn ich jedoch einen Knoten zur Laufzeit hinzufüge und sie exportiere, erhalte ich:

"Zugriffsverletzung an Adresse 00405772 in Modul 'Project1.exe'. Lesen von Adresse 00000388."

Ich denke, das muss an der Art und Weise liegen, wie ich die Daten den erstellten Knoten zuordne, vielleicht anders als beim Import, aber für mich sieht das alles gut aus. Die Zugriffsverletzung tritt nur beim Exportieren auf, bei importierten Dateien passiert das nie.

Ich bin NICHT auf der Suche nach einer Lösung für das obige Beispiel, sondern hauptsächlich nach Ratschlägen/Tipps, wie man solche Fehler finden und beheben kann. Ich habe nicht oft Zugriffsverletzungen, aber wenn ich sie habe, sind sie wirklich schwer aufzuspüren und zu beheben.

Ratschläge und Tipps wären also sehr nützlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X