Вопрос

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

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

Заранее спасибо, Бриеш

Это было полезно?

Решение

  1. Память была разбита, то есть что-то перезаписать память.

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

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

Другие советы

Скорее всего что-то переписать весь объект. Что-то вроде этого:

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

который в порядке, пока он не используется на объекте с VPTR.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top