Pourquoi mon object C ++ perd son VPTr

Lors du débogage d’un des core dump du programme, je suis tombé sur le scénario où son object contenu, qui est polymorphe, perd son VPTr et je peux voir qu’il pointe vers NULL.

Quel pourrait être le scénario lorsqu’un object perd son VPTr.

Merci d’avance, Brijesh

  1. La mémoire a été détruite, c’est-à-dire que quelque chose a écrasé la mémoire.

  2. Vous l’avez détruit en appelant delete ou en appelant directement le destructeur. Cela ne rend généralement pas NULL le vptr, il finira par le faire pointer sur la vtable de la classe de base, mais cela dépend de votre implémentation.

Très probablement, cas 1. Si vous avez un débogueur doté de points d’arrêt mémoire et que vous pouvez reproduire le problème de manière fiable, définissez un point d’arrêt mémoire sur le vptr et voyez ce qui le modifie.

Il est probable que quelque chose a écrasé l’object entier. Quelque chose comme ça:

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

ce qui va bien jusqu’à ce qu’il soit utilisé sur un object avec vptr.

Il se peut que vous essayiez d’utiliser la v-table pendant le destructeur de votre object. La v-table n’est pas disponible pour le moment.