Question

Lors du débogage d'un de décharge de base du programme, je suis tombé sur le scénario où son objet contenu qui est polymorphique perd sa VPTR et je peux voir son pointage à NULL.

Quel pourrait être le scénario lorsqu'un objet perd son VPTR.

Merci à l'avance, Brijesh

Était-ce utile?

La solution

  1. La mémoire a été saccagé, à savoir quelque chose réenregistrés la mémoire.

  2. Vous avez détruit en appelant ou de suppression en invoquant l'destructor directement. Cela ne généralement pas NULL le VPTR, il va juste finir par avoir pointer vers la vtable de la classe de base, mais cela dépend de votre mise en œuvre.

Très probablement, le cas 1. Si vous avez un débogueur qui a des points d'arrêt de mémoire et si vous pouvez reproduire le problème de manière fiable, définir un point d'arrêt de la mémoire sur le VPTR et voir ce modifier.

Autres conseils

quelque chose probable réenregistrés l'objet entier. Quelque chose comme ceci:

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

ce qui est bien jusqu'à ce qu'il soit utilisé sur un objet avec VPTR.

Il se peut que vous essayez d'utiliser le v-table lors de la destructor de votre objet. La v-table ne sont pas disponibles à ce moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top