Pregunta

Estoy cambiando el relevo de Visual Studio 2008 -.> 2010 y me he encontrado con un extraño error en mi código en la evaluación de un hallazgo en un std :: conjunto de punteros

Yo sé que esta versión trae consigo un cambio en el set :: iterador tiene el mismo tipo que el conjunto :: const_iterator para llevar a cabo alguna compatibilidad con el estándar. Pero no puedo entender por qué esta sección del código que anteriormente trabajó ahora causa un accidente?

void checkStop(Stop* stop)
{
    set<Stop*>                      m_mustFindStops;
    if (m_mustFindStops.find(stop) != m_mustFindStops.end()) // this line crashes for some reason??
    {
         // do some stuff
    }
}

PS m_mustFindStops está vacía cuando se rompe.

EDIT: Gracias por las respuestas rápidas ... no puedo conseguir que se reproducen con un caso simple, ya sea - probablemente no es un problema con el conjunto de su auto. Creo que daños en la pila puede ser un culpable - Ojalá supiera por qué cambian los compiladores de repente causa la corrupción para el mismo código y los datos de entrada mismos.

¿Fue útil?

Solución

Lo único que se me ocurre es que tiene múltiples hilos, y m_mustfindStops es de hecho un miembro o una variable global y no un local para esta función. No hay manera de que el código anterior puede causar problemas, si es correcto y tomado aisladamente.

Si usted tiene múltiples hilos, el acceso concurrente a continuación, lea con acceso de escritura hará que los errores aleatorios -. Aunque el envase se ve vacía, no podría haber sido cuando comenzó la llamada find

Otra posibilidad es que algún otro código ha corrompido el montón, en cuyo caso, sin embargo, cualquiera de su código que la memoria heap usos podrían no funcionar correctamente. Con esto en mente, si siempre que esta lógica se rompe, mi apuesta sería en un tema de enhebrado.

por cierto - no hay absolutamente nada de malo en std::set en Visual C ++ v10 -. Su código debe tener un error

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top