FIX: I programmi che vengono compilati in Visual C++ 2013 arresto anomalo con l'eccezione "Istruzione non valida"

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 3174417
Sintomi
Quando si compila un programma utilizzando Microsoft Visual C++ 2013, il programma si blocca e si riceve un'eccezione di "Istruzione non valida". Ciò si verifica perché alcune funzioni di libreria matematica a virgola mobile di runtime di Visual C++ 2013 x64 C (CRT) non controlla correttamente se determinate istruzioni AVX e FMA3 sono disponibili prima che le funzioni tentano di utilizzarli. Se le istruzioni non sono disponibili per l'utilizzo, chiamate a queste funzioni causano un'istruzione non valida (0xc000001d). Funzioni interessate includono log, log10 e pow e altri.

Questo problema è più probabile si verifichi nei seguenti scenari:
  • In una versione precedente del sistema operativo Windows che non supporta AVX stato salvataggio (ad esempio, Windows Vista) se viene utilizzato in un computer che supporta il set di istruzioni AVX
  • Se il salvataggio dello stato di AVX è disabilitato in modo esplicito nella configurazione di avvio del sistema operativo
  • Nell'ambiente di preinstallazione di Windows (Windows PE)

    Nota Windows PE non supporta il salvataggio dello stato di AVX.

Questo problema è stato riscontrato su Microsoft Connect:

Cause
Questo problema si verifica perché il Runtime di Visual C++ 2013 x64 C verifica se il sistema operativo supporta il salvataggio dello stato AVX prima di tentare di eseguire istruzioni AVX o FMA3.
Risoluzione
Se tutti i binari C++ interessati che vengono compilati utilizzando Visual C++ 2013 utilizzano la DLL di Runtime C (msvcr120.dll), installare aggiornamento Microsoft Visual C++ 2013 Redistributable – 12.0.40660.0 o versione successiva.

Se i file binari C++ interessati collegano statico il Runtime di Visual C++ 2013 C, è necessario aggiornare l'installazione di Visual Studio 2013 installazione dell'hotfix 3174417 e ricompilare e ridistribuire i file binari interessati.

Nota Questo problema non riguarda le versioni precedenti della C Runtime di Visual C++ (Visual C++ 2012 e versioni precedenti). Il problema è stato risolto prima del rilascio iniziale di CRT universale utilizzato da Visual C++ 2015.

Area Download Microsoft

Per aggiornare il Runtime di C collegata staticamente di Visual C++ 2013, l'hotfix 3174417 è stato rilasciato come un aggiornamento di solo download e non viene distribuito tramite Windows Update. È disponibile presso il sito Web Microsoft Download Center:

DownloadDownload del pacchetto.

Per aggiornare dinamicamente collegato DLL di Visual C++ 2013 C Runtime, una versione aggiornata ridistribuibile è disponibile. Per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base:

Workaround
Se è interessati da questo problema, Towork il problema, disattivare FMA3 nella libreria math. È possibile eseguire una query se il sistema supporta istruzioni AVX chiamandoGetEnabledXStateFeatures e la disattivazione di AVX in CRT in modo esplicito chiamando _set_FMA3_enable(0).

Per ulteriori informazioni, vedere Utilizzo di contesto XState sul sito Web MSDN.

Viene dichiarata la funzione _set_FMA3_enable(0) in <math.h>, ed è disponibile solo quando si compila per x64. (Questo problema interessa solo la x64 le librerie.) In questo modo la libreria math per tornare a utilizzare le implementazioni non-FMA3. </math.h>

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 3174417 - Ultima revisione: 07/28/2016 08:24:00 - Revisione: 1.0

Visual Studio 2013 Community Edition

  • kbfix kbqfe atdownload kbexpertiseadvanced kbsurveynew kbmt KB3174417 KbMtit
Feedback