REVISIÓN: Un comportamiento inesperado al ejecutar una aplicación de Visual Studio 2008 Service Pack 1 generado que llama a la función setjmp o longjmp en un archivo de código fuente


Síntomas


Imagine la siguiente situación:
  • Habilitar la opción de optimización global (/og/Og) activando una de las siguientes opciones:
    • /O1 
    • /O2 
    • /Ox 
  • Generar un archivo de código fuente de Microsoft Visual C++ con Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • El archivo de origen llama setjmp (función), la función longjmp o ambas funciones.
En este escenario, el compilador puede utilizar el mismo desplazamiento de la pila para almacenar las variables locales. Por lo tanto, puede producirse un comportamiento inesperado al ejecutar la aplicación generada.

Causa


Este problema se produce porque el optimizador no tiene en cuenta la función setjmp o longjmp . Esto hace que el optimizador calcular incorrectamente la duración de las variables locales. Cuando se cambia una variable, se puede cambiar inesperadamente otra variable.

Solución


Información de la revisión

Existe un hotfix disponible desde Microsoft. Sin embargo, esta revisión se diseñó para corregir el problema descrito en este artículo. Aplique esta revisión solamente a sistemas que experimenten el problema descripto en este artículo. Esta revisión podría ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere a la próxima actualización de software que contenga este hotfix. Para resolver este problema inmediatamente, póngase en contacto con los servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft: Nota En casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión. Para descargar este hotfix desde la Galería de código de Microsoft Developer Network (MSDN), visite el siguiente sitio Web de Microsoft:Nota MSDN Code Gallery muestra los idiomas para los que la revisión está disponible. Si no ve su idioma en la lista, es porque la página de recursos de galería de código no está disponible para ese idioma. O bien, puede descargar este hotfix desde el siguiente sitio Web de Microsoft Connect:

Requisitos previos

Para aplicar este hotfix, debe tener Microsoft Visual Studio 2008 Service Pack 1 instalado.

Información de reinicio

No es necesario que reinicie el equipo después de instalar este hotfix si ha dejado de todas las instancias de Visual Studio.

Información de la sustitución de revisión

Esta revisión no sustituye a ninguna revisión publicada previamente.

Información sobre los archivos

La versión global de esta revisión instala archivos que tienen los atributos que se enumeran en las siguientes tablas. Las fechas y horas de estos archivos se muestran según la Hora universal coordinada (UTC). Las fechas y horas de estos archivos se muestran en el equipo local en horario local con la configuración actual del horario de verano (DST). Además, las fechas y horas pueden cambiar cuando realiza determinadas operaciones en los archivos.
Nombre de archivoVersión de archivoTamaño de archivoFechaHoraPlataforma
C2.dll15.0.30729.61472,283,84025-Feb-201101:25x86
C2.dll15.0.30729.61472,362,68825-Feb-201101:25x86
C2.dll15.0.30729.61472,493,24825-Feb-201101:25x86
C2.dll15.0.30729.61473,018,04825-Feb-201101:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025-Feb-201101:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

Solución alternativa


Para evitar este problema, inicializar las variables locales antes de la función para que el compilador puede ser consciente de la duración de las variables.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".

Más información


Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft