¿Qué puede hacer que el puntero de VTable sea 0xdddddddd en la compilación de depuración de Win32?

stoy depurando un defecto y lo he reducido al puntero vtable para que un objeto sea0xdddddddd. Esta respuesta indica que las compilaciones de depuración de Win32 generalmente establecerán la memoria muerta, o la memoria que se ha eliminado, en este valor especial.

Nota que elpunter en sí parece válido, es solo elvtable puntero es decir0xdddddddd.

Aquí hay un fragmento 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     
}

Si rompo la línea de la infracción de acceso y veopMyObject, Puedo ver esopMyObject tiene una dirección válida 0x08ede388) pero el__vfptr miembro no es válido 0xdddddddd).

Algunas notas

Es una aplicación de un solo subproceso, por lo que probablemente no sea una condición de carrera o un problema de mutex. No parece haber ningún problema obvio, como eliminar el objeto más arriba en la pila de llamadas antes de acceder a él.ste problema parece ser solo reproducible en el servidor de Windows 2008, pero no en Windows 7.

¿Alguna sugerencia sobre cómo depurar esto más?

Respuestas a la pregunta(4)

Su respuesta a la pregunta