Frage

Während einer der Core-Dump-Programm debuggen stieß ich auf das Szenario, in dem die darin enthaltenen Objekt, das seine vptr polymorph verliert und ich kann seine zeigt auf NULL sehen.

Was das Szenario sein könnte, wenn ein Objekt verliert sein vptr.

Vielen Dank im Voraus, Brijesh

War es hilfreich?

Lösung

  1. Der Speicher trashed wurde, das heißt etwas überschreiben den Speicher.

  2. Sie zerstört es durch Löschen Aufruf oder durch die destructor direkt aufrufen. Dies gilt normalerweise nicht NULL aus dem vptr, wird es nur an die VTable der Basisklasse Punkt am Ende mit, aber das hängt von der jeweiligen Implementierung.

Wahrscheinlich Fall 1. Wenn Sie einen Debugger, die Speicherhaltepunkte hat, und wenn Sie das Problem zuverlässig, stellen Sie auf der vptr einen Speicherhaltepunkt reproduzieren können und sehen, was es zu ändern.

Andere Tipps

Wahrscheinlich etwas überschreiben das ganze Objekt. So etwas wie folgt aus:

memset( object, 0, sizeof( *object ) );

, das ist in Ordnung, bis sie auf ein Objekt mit vptr verwendet wird.

Es kann sein, dass Sie versuchen, die V-Tabelle ist während Ihres Objekts destructor zu verwenden. Die V-Tabelle ist zu diesem Zeitpunkt nicht verfügbar ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top