Почему мой объект C ++ теряет свой VPTr - PullRequest
6 голосов
/ 19 октября 2010

При отладке одного из дампов ядра программы я столкнулся со сценарием, в котором содержащийся в нем объект, который является полиморфным, теряет свой VPTr, и я вижу, что он указывает на NULL.

Какой может быть сценарий, когда объект теряет свой VPTr.

Спасибо заранее, Brijesh

Ответы [ 3 ]

6 голосов
/ 19 октября 2010
  1. Память была уничтожена, т.е. что-то перезаписало память.

  2. Вы уничтожили ее, вызвав delete или вызвав деструктор напрямую.Обычно это не NULL из vptr, а просто указание на vtable базового класса, но это зависит от вашей реализации.

Скорее всего, случай 1.Если у вас есть отладчик, у которого есть точки останова памяти, и если вы можете надежно воспроизвести проблему, установите точку останова памяти на vptr и посмотрите, что ее модифицирует.

5 голосов
/ 19 октября 2010

Вероятно, что-то перезаписало весь объект. Примерно так:

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

это нормально, пока не будет использовано на объекте с vptr.

0 голосов
/ 19 октября 2010

Возможно, вы пытаетесь использовать v-таблицу во время деструктора объекта V-таблица в настоящее время недоступна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...