https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_debug_values

аживаю дефект и сузил его до указателя vtable для объекта0xdddddddd. Этот ответ указывает, что отладочные сборки Win32, как правило, устанавливают мертвую память или память, которая была удалена, в это специальное значение.

Обратите внимание, чтоуказатель Сам выглядит правдоподобно, это простоуказатель vtable это0xdddddddd.

Вот фрагмент кода:

std::list<IMyObject*>::const_iterator it;
for (it = myObjects.begin(); it != myObjects.end(); ++it)
{
    IMyObject* pMyObject = *it;
    if (pMyObject == 0)
        continue;

    pMyObject->someMethod(); // Access violation     
}

Если я ломаю на линии нарушения доступа и смотрюpMyObject, Я могу видеть этоpMyObject сам имеет действительный адрес (0x08ede388) но__vfptr член недействителен (0xdddddddd).

Некоторые заметки:

Это однопоточное приложение, так что это, скорее всего, не проблема гонки или мьютекса.Кажется, что нет никаких очевидных проблем, таких как удаление объекта вверх по стеку вызовов перед доступом к нему.Эта проблема может быть воспроизведена только на сервере Windows 2008, но не на Windows 7.

Любые предложения о том, как отладить это дальше?

Ответы на вопрос(4)

Ваш ответ на вопрос