Perché il C ++ oggetto perde la sua VPTr
Domanda
Mentre il debug uno dei core dump del programma mi sono imbattuto lo scenario in cui il suo oggetto contenuto che è polimorfa perde la sua VPTr e posso vedere la sua punta a NULL.
Quale potrebbe essere lo scenario quando un oggetto perde la sua VPTr.
Grazie in anticipo, Brijesh
Soluzione
-
La memoria è stato cestinato, vale a dire qualcosa ha sovrascritto la memoria.
-
Hai distrutto chiamando delete o invocando direttamente il distruttore. Questo fa in genere non NULL la vptr, sarà solo finire per dover puntare a vtable della classe base, ma che dipende dalla vostra applicazione.
Molto probabilmente, caso 1. Se si dispone di un debugger che ha punti di interruzione di memoria e se è possibile riprodurre il problema in modo affidabile, impostare un punto di interruzione di memoria sul vptr e vedere quello che sta modificandolo.
Altri suggerimenti
Probabilmente qualcosa sovrascritto l'intero oggetto. Qualcosa di simile a questo:
memset( object, 0, sizeof( *object ) );
che è bene fino a quando viene utilizzato su un oggetto con vptr.
Può essere che si sta tentando di utilizzare il v-tavolo durante distruttore del vostro oggetto. Il v-tabella non è disponibile in questo momento.