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

È stato utile?

Soluzione

  1. La memoria è stato cestinato, vale a dire qualcosa ha sovrascritto la memoria.

  2. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top