Обычно я получаю повреждение vptr, когда объект был удален дважды (и да, это всегда ошибка). В большинстве случаев для меня vptr просто указывает на какой-то случайный блок памяти, но звучит так, будто ваш перезаписывается NULL, что может быть из-за того, что ОС отбрасывает освобожденную память, или может указывать на то, что делает перезапись.
Попробуйте использовать boost :: shared_ptr , чтобы сохранить срок службы с правами собственности.