O que pode fazer com que o ponteiro de VTable seja 0xddddddddd na compilação de depuração do Win3

Estou depurando um defeito e o reduzi ao ponteiro vtable para um objeto sendo0xdddddddd. Esta resposta indica que as compilações de depuração do Win32 geralmente definem a memória morta ou a memória que foi excluída para esse valor especia

Observe que o ponteiro parece válido, é apenas ovtable pointer isso é0xdddddddd.

Aqui está um trecho de código:

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     
}

Se eu quebrar a linha da violação de acesso e assistirpMyObject, Eu posso ver issopMyObject em si tem um endereço válido 0x08ede388) mas o__vfptr member é inválido 0xdddddddd).

Algumas notas

É um aplicativo de thread único, portanto, provavelmente não é uma condição de corrida ou problema de mute Não parece haver problemas óbvios, como excluir o objeto na pilha de chamadas antes de acessá-lEste problema parece ser reproduzível apenas no servidor Windows 2008, mas não no Windows 7.

Alguma sugestão sobre como depurar isso ainda mais?

questionAnswers(4)

yourAnswerToTheQuestion