Virtual Function Pointer ungültig
-
Wer kann mir sagen, unter welchen Umständen ein virtual function pointer
zur Laufzeit ungültig wird ?Entwicklungsumgebung VC++ 6.0 meldet zur Laufzeit unhandled exception beim Zugriff per Pointer auf die virtual function table.
Hintergrund: Eine Klassenstruktur mit Vererbung wird über einen Pointer auf die Basisklasse verwaltet. Dieser Pointer befindet sich innerhalb einer anderen Klasse und wird zur Laufzeit sporadisch ungültig (nach Exception enthält er im Debugger den Wert 0xdddddddd)
Vielen Dank für die Hilfe im voraus.
Stefan
-
Du überschreibst ihn irgendwo aus Versehen?
-
0xdddddddd ist der Wert, mit dem Visual C++ (in der Debug-Konfiguration) freigegebenen Speicher überschreibt. Anscheinend wurde die Instanz der Klasse, die den Zeiger beinhaltet, bereits gelöscht.
-
Danke für den Hinweis mit dem Wert 0xdddddddd.
Korrektur zur Fehlerbeschreibung:
Der Wert des Pointers, der auf die Basisklasse der Vererbungsstruktur zeigt, bleibt beim Auftreten des Fehlers weiterhin gültig, allerdings verliert dieser seinen virtual function pointer (in Debugger unter Visual C++ mit __vptr bezeichnet). Dieser Wert wird zu 0xdddddddd.
Durch welche Umstände kann der Zeiger eines Objekts auf seine virtual function table zur Laufzeit gelöscht werden ?
-
vinzstef schrieb:
Durch welche Umstände kann der Zeiger eines Objekts auf seine virtual function table zur Laufzeit gelöscht werden ?
steht 0xdddddddd nicht für "deleted deleted deleted deleted deleted deleted deleted deleted "?
dann wäre evtl das ganze objekt mit delete gelöscht worden und das debug-delete überschreibt den ganzen objektinhalt incl. vptr mit 0xdddddddd.