REVISIÓN: Programas creados en Visual C++ de 2013 de bloqueo con la excepción de "Illegal Instruction"

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3174417
Síntomas
Al compilar un programa utilizando Microsoft Visual C++ 2013, el programa se bloquea y recibe una excepción "Illegal Instruction". Esto ocurre porque algunas funciones de la biblioteca de matemáticas de punto flotante en tiempo de ejecución de Visual C++ 2013 x64 C (CRT) no comprueba correctamente si determinadas instrucciones AVX y FMA3 están disponibles antes de que las funciones intentan utilizarlos. Si las instrucciones no están disponibles para su uso, las llamadas a estas funciones producirá una excepción de instrucción ilegal (0xc000001d). Funciones afectadas incluyen log, log10 y pow y otros.

Este problema es más probable que se produzca en las situaciones siguientes:
  • En una versión anterior del sistema operativo Windows que no admite AVX estado guardar (por ejemplo, Windows Vista) si se utiliza en un equipo que admite el conjunto de instrucciones AVX
  • Si guardar estado AVX esté explícitamente deshabilitada en la configuración de arranque del sistema operativo
  • En el entorno de preinstalación de Windows (Windows PE)

    Nota: Windows PE no admite guardar estado AVX.

Se ha detectado este problema en Microsoft Connect:

Causa
Este problema se produce porque el tiempo de ejecución de Visual C++ 2013 x64 C no comprueba si el sistema operativo admite AVX estado guardando antes de intentar ejecutar las instrucciones AVX o FMA3.
Solución
Si todos los binarios de C++ afectados que se generan utilizando 2013 de Visual C++ utilizan el archivo DLL en tiempo de ejecución de C (msvcr120.dll), instale el actualizado Microsoft Visual C++ 2013 Redistributable – 12.0.40660.0 o una versión posterior.

Si los archivos binarios de C++ afectados vinculan estáticamente el tiempo de ejecución de Visual C++ de 2013 C, debe actualizar la instalación de Visual Studio 2013 de instalar el hotfix 3174417 y reconstruir y volver a implementar los archivos binarios afectados.

Nota: Este problema no afecta a las versiones anteriores de Visual C++ C Runtime (2012 de Visual C++ y versiones anteriores). El problema fue solucionado antes del lanzamiento inicial de CRT Universal que se utiliza Visual C++ 2015.

Centro de descarga de Microsoft

Para actualizar el vinculado estáticamente C Runtime de Visual C++ de 2013, la revisión 3174417 se publica como una actualización de sólo descarga y no está distribuido a través de Windows Update. Se encuentra disponible en el sitio Web de Microsoft Download Center:

DescargarDescargue ahora el paquete.

Para actualizar el vinculada dinámicamente Visual C++ 2013 C Runtime DLL, un controlador actualizado, versión redistribuible está disponible. Para obtener más información, consulte el siguiente artículo de Microsoft Knowledge Base:

Solución
Towork solucionar este problema, deshabilite FMA3 en la biblioteca math si están afectados por este problema. Puede consultar si el sistema admite las instrucciones AVX llamando aGetEnabledXStateFeatures y deshabilitar AVX en CRT explícitamente mediante una llamada a _set_FMA3_enable(0).

Para obtener más información, vea Trabajar con el contexto de XState en el sitio Web MSDN.

La función _set_FMA3_enable(0) se declara en <math.h>, y está disponible sólo cuando se genera para x64. (Este problema afecta sólo a la x64 las bibliotecas.) Esto hace que la biblioteca de matemáticas volver a usar las implementaciones no FMA3. </math.h>

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3174417 - Última revisión: 07/28/2016 08:20:00 - Revisión: 1.0

Visual Studio 2013 Community Edition

  • kbfix kbqfe atdownload kbexpertiseadvanced kbsurveynew kbmt KB3174417 KbMtes
Comentarios