Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 7. Okt 2019, 13:09
Hallo,
wenn man Fehler macht kann es ja vorkommen, dass auch ein Zugriff über eine Objektvariable die "Assigned" ist zu einer Zugriffsverletzung führt.

Da es "jemanden" gibt der diese Exception wirft müsste es doch auch möglich sein darauf zu prüfen bevor die zugriffsverletzung passiert, oder?
Delphi-Quellcode:
If islegal(Myobject.free) then
Begin

end;
Oder?
Ganz so einfach ist die Sache nicht, die Exception kommt irgendwo aus den Tiefen der virtuellen Speicherverwaltung des Betriebssystems, und es kommt nicht nur auf die Adresse selbst an, sondern auch darauf, was man damit anstellt (lesen, schreiben, ausführen), und wohin der Pointer zeigt (stack, Delphi memory manager heap, OS memory). Es gibt zwar OS-Funktionen wie IsBadReadPtr, IsBadWritePtr, IsBadCodePtr, VirtualQueryEx, aber die sind nur begrenzt nützlich. Selbst wenn MyObject eine legal aussehende Adresse enthält (z. B. aus einem Block des MMs) muß sie ja nicht auf eine Objekt der erwarteten Klasse zeigen, und selbst wenn sie das tut ist nicht gesagt, dass der Inhalt des Objektes noch in Ordnung ist. Im Allgemeinen ist dies eine Aufgabe aus der Klasse "Fool's errant", es ist pure Zeitverschwendung da schlicht nicht final lösbar. Halt lieber Disziplin, setz konsequent FreeAndNil für Objektvariablen ein, die außerhalb des lokalen Scopes sichtbar sind, oder verwende lifetime management über Interfaces anstelle von Objektreferenzen.
Peter Below
  Mit Zitat antworten Zitat