CORRECTIF : Programmes qui reposent dans incident Visual C++ 2013 à l’exception de « Instruction illégale »

Symptômes

Lorsque vous générez un programme à l’aide de Microsoft Visual C++ 2013, le programme se bloque et vous recevez une exception « Instruction illégale ». Cela se produit parce que certaines fonctions de bibliothèque de mathématiques à virgule flottante dans le Runtime de Visual C++ 2013 x64 C (CRT) ne pas correctement vérifient si certaines instructions AVX et FMA3 sont disponibles avant que les fonctions de tentent de les utiliser. Si les instructions ne sont pas disponibles, les appels à ces fonctions provoquent une exception d’instruction non conforme (0xc000001d). Fonctions affectées incluent le journal de, log10, pow et des autres.

Ce problème est plus susceptible de se produire dans les scénarios suivants :

  • Sur une ancienne version du système d’exploitation Windows qui ne prend pas en charge les AVX état l’enregistrement (par exemple, Windows Vista) si elle est utilisée sur un ordinateur prenant en charge le jeu d’instructions AVX

  • Si l’enregistrement d’état AVX est explicitement désactivée dans la configuration de démarrage du système d’exploitation

  • Dans l’environnement de préinstallation Windows (Windows PE)

    Remarque Windows PE ne gère pas d’enregistrement d’état AVX.


Ce problème a été signalé sur Microsoft Connect :



Cause

Ce problème se produit car le Runtime Visual C++ 2013 x64 C ne vérifie pas si le système d’exploitation prend en charge l’enregistrement d’état AVX avant d’essayer d’exécuter des instructions AVX ou FMA3.

Résolution

Si tous les fichiers binaires C++ concernés qui sont générés à l’aide de Visual C++ 2013 utilisent la DLL d’exécution C (msvcr120.dll), installez la mise à jour redistribuable Microsoft Visual C++ 2013 – 12.0.40660.0 ou une version ultérieure.

Si vos fichiers binaires de C++ affectés de manière statique le Runtime C de Visual C++ 2013, vous devez mettre à jour votre installation de Visual Studio 2013 par l’installation du correctif 3174417 et de reconstruction et de redéployer les fichiers binaires concernés.









Remarque Ce problème n’affecte pas les versions antérieures de Visual C++ C Runtime (Visual C++ 2012 et les versions antérieures). Le problème a été résolu avant la version initiale de la CRT universel qui est utilisé par Visual C++ 2015.

Centre de téléchargement Microsoft

Pour mettre à jour le Runtime liées statiquement C de 2013 Visual C++, le correctif 3174417 est publié sous la forme d’une mise à jour par téléchargement uniquement et n’est pas distribué par le biais de Windows Update. Il est disponible sur le site Web de Microsoft Download Center :

Download

Mettre à jour dynamiquement lié DLL Visual C++ 2013 C Runtime, une mise à jour redistribuable est disponible. Pour plus d’informations, consultez l’article suivant de la Base de connaissances Microsoft :

Solution de contournement

Pour contourner ce problème, désactivez le FMA3 de la bibliothèque de mathématiques si vous êtes concerné par ce problème. Vous pouvez interroger si le système prend en charge les instructions AVX en appelant GetEnabledXStateFeatures et en désactivant les AVX le CRT explicitement en appelant _set_FMA3_enable(0).

Pour plus d’informations, consultez sur le site Web MSDN.

La fonction _set_FMA3_enable(0) est déclarée dans < math.h >, et il n’est disponible que lorsque vous générez pour x64. Ce problème affecte uniquement les x64 bibliothèques (.) Ainsi, la bibliothèque de mathématiques rétablir les implémentations non-FMA3.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×