Застосовується до
Visual Studio Community 2013

Причини

При створенні програми за допомогою Microsoft Visual C++-2013, програма аварійно завершує роботу, і з'являється "Неприпустима інструкція" виняток. Це відбувається, тому, що деякі функції з рухомою комою математика на виконання Visual C++ 2013 року x64 C (CRT) не належним чином перевіряти функції, а потім їх використання певних AVX та FMA3 інструкції будуть доступні. Інструкції не доступні для використання, викликах функцій, ці спричинити неприпустима інструкція винятки (0xc000001d). Такі функції, містять журналу, log10 і pow та інші.Ця проблема є відбуваються у таких випадках:

  • На старої версії операційної системи Windows, які не підтримують AVX стан збереження (наприклад, Windows Vista), якщо він використовується на комп'ютері, який підтримує набір інструкцій AVX

  • Якщо AVX стану збереження явно вимкнуто в конфігурації завантаження операційної системи

  • У середовищі попередньої інсталяції Windows (Windows PE)Примітка. AVX стану збереження не підтримує Windows PE.

Як повідомляють, ця проблема з Microsoft Connect:

x64 log() функції, використовує vpsrlq інструкцій AVX, незалежно від операційної системи (так, вона аварійно завершує роботу у Vista x64) Visual Studio 2013 RTM: C++ x64 з кодом помилки створення AVX2 інструкції

Причина

Ця проблема виникає в тому, що виконання Visual C++ 2013 року x64 C не перевірити, чи операційна система підтримує, що AVX стану збереження, перш ніж вона намагається виконати AVX або FMA3 інструкцій.

Вирішення

Всі задіяні C++ двійкові файли, створені за допомогою Visual C++-2013, використання бібліотеки DLL C Runtime (msvcr120.dll), інсталюйте на оновлені Microsoft 2013 вторинного розповсюдження Visual C++-12.0.40660.0 або пізнішої версії.Якщо ваш впливу двійкових файлів C++ статично посилання на Visual C++ 2013 виконання C, необхідно оновити вашу копію Visual Studio-2013 інсталяція 3174417 виправлення та відновлення redeploying такі файли.Примітка. Ця проблема не впливає на старіші версії Visual c + + C Runtime (Visual C++-2012 і попередні версії). Виправлено проблему до випуску універсальний CRT, який використовується в Visual C++ 2015 р.

Центр завантажень Microsoft

Щоб оновити статично Visual C++ 2013 C Runtime, 3174417 виправлення випущено як тільки для завантаження оновлення і не розповсюджується за допомогою служби Windows Update. Вона доступна на сайті центру завантажень Microsoft:Download Завантажити пакет оновлень.Оновлення динамічно пов'язаних Visual C++ 2013 C Runtime DLL, оновлена вторинного розповсюдження доступна. Щоб отримати додаткові відомості див. таку статтю бази знань Майкрософт:

3179560 поновлення для Visual C++-2013 і завантажити пакет вторинного розповсюдження Visual C++

Виправлення помилок

Щоб вирішити цю проблему, вимкніть FMA3, у бібліотеці математичних символів, якщо ви схильні до цієї проблеми. Можна надсилати запит, чи система підтримує AVX інструкції, зателефонувавши GetEnabledXStateFeatures та вимкнення AVX, у полі CRT, явно, зателефонувавши за номером _set_FMA3_enable(0).Щоб отримати додаткові відомості див. Робота з XState контекстіна сайті MSDN.Функції- _set_FMA3_enable(0) оголошена в < Math. h >, і вона доступна лише тоді, коли ви створити для x64. (Ця проблема впливає лише на x64 бібліотеки.) Це призводить до бібліотеки математичних символів до використання non-FMA3 впровадження.

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.