تصحيح: البرامج التي تم إنشاؤها في Visual c + + 2013 تحطم باستثناء "تعليمات غير قانونية"

الأعراض

عند إنشاء برنامج باستخدام Microsoft Visual c + + عام 2013، يتعطل البرنامج وتتلقى استثناء "تعليمات غير قانونية". يحدث هذا بسبب بعض دالات مكتبة حساب الفاصلة العائمة في Visual c + + 2013 x64 C وقت التشغيل (CRT) يتحقق ما إذا كانت بعض الإرشادات AVX و FMA3 متوفرة قبل محاولة الوظائف استخدامها. إذا لم تتوفر الإرشادات للاستخدام، الاستدعاءات إلى هذه الدوال يؤدي استثناء تعليمة غير قانونية (0xc000001d). تتضمن دالات المتأثرة سجل، log10، وأسرى الحرب وغيرها.

هذه المشكلة الأكثر احتمالاً أن يحدث في السيناريوهات التالية:

  • في نسخة قديمة من نظام تشغيل Windows الذي لا يدعم AVX حالة حفظ (على سبيل المثال، في Windows Vista) إذا يتم استخدامه على جهاز كمبيوتر يدعم مجموعة إرشادات AVX

  • إذا تم تعطيل الحفظ الدولة AVX بشكل واضح في تكوين تشغيل نظام التشغيل

  • في بيئة التثبيت المسبق ل Windows (Windows PE)

    ملاحظة: لا يعتمد Windows PE حفظ حالة AVX.


تم الإبلاغ عن هذه المشكلة على اتصال Microsoft:

x64 يستخدم دالة log() تعليمة AVX فبسرلق دون اعتبار لنظام التشغيل (حيث أنها تعطل ويندوز فيستا x64)

Visual Studio 2013 RTM: إنشاء الأخطاء للحصول على إرشادات AVX2 التعليمات البرمجية c + + x64

السبب

تحدث هذه المشكلة لأن وقت التشغيل Visual c + + x64 C عام 2013 لن يتحقق ما إذا كان نظام التشغيل يدعم حفظ حالة AVX قبل أن يحاول تشغيل تعليمات AVX أو FMA3.

الحل

في حالة استخدام كافة الثنائيات c + + المتأثرة التي تم إنشاؤها باستخدام Visual c + + 2013 DLL وقت التشغيل C (msvcr120.dll)، تثبيت تحديث Microsoft Visual c + + 2013 القابلة لإعادة التوزيع – 12.0.40660.0 أو إصدار أحدث.

إذا كان الارتباط ثنائيات c + + الخاص المتأثر بشكل ثابت "وقت التشغيل C 2013 Visual c + +"، يجب تحديث تثبيت Visual Studio 2013 بتثبيت الإصلاح العاجل 3174417 وإعادة بناء وإعادة نشر الثنائيات المتأثرة.









ملاحظة: لا تؤثر هذه المشكلة على الإصدارات السابقة من Visual c + + C وقت التشغيل (2012 Visual c + + والإصدارات السابقة). تم إصلاح المشكلة قبل الإصدار الأولى من CRT العالمي المستخدمة من قبل Visual c + + 2015.

مركز تنزيل Microsoft

لتحديث المرتبط بشكل ثابت Visual c + + 2013 C وقت التشغيل، الإصلاح العاجل 3174417 إصدارها كتحديث تنزيل فقط ولم يتم توزيعها من خلال Windows Update. ومتوفرة في موقع "مركز تنزيل microsoft":

Download قم بتنزيل الحزمة الآن.

لتحديث مرتبط بشكل حيوي Visual c + + 2013 C وقت تشغيل Dll، مستكملا القابلة لإعادة التوزيع متوفرة. لمزيد من المعلومات، راجع مقالة قاعدة معارف Microsoft التالية:

تحديث 3179560 ل 2013 Visual c + + و + + Visual C القابلة لإعادة التوزيع

الحل البديل

للتغلب على هذه المشكلة، قم بتعطيل FMA3 في مكتبة الرياضيات إذا كنت متأثراً بهذه المشكلة. يمكنك الاستعلام عن ما إذا كان النظام يعتمد الإرشادات AVX عن طريق استدعاء جيتينابليدكسستاتيفيتوريس وتعطيل AVX في CRT بشكل صريح عن طريق استدعاء _set_FMA3_enable(0).

لمزيد من المعلومات، راجع العمل ضمن سياق إكسستاتيعلى موقع MSDN على ويب.

تم تعريف الدالة _set_FMA3_enable(0) في < math.h >، ويتوفر فقط عند إنشائك ل x64. (هذه المشكلة تؤثر x64 فقط المكتبات.) يؤدي مكتبة الرياضيات العودة لاستخدام التطبيقات غير FMA3.

هل تحتاج إلى مزيد من المساعدة؟

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Microsoft Insider

هل كانت المعلومات مفيدة؟

نشكرك على ملاحظاتك!

شكراً لك على الملاحظات! يبدو أنه من المفيد إيصالك بأحد وكلاء دعم Office لدينا.

×