ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

เมื่อคุณสร้างโปรแกรม โดยใช้ Microsoft 2013 ของ Visual C++ โปรแกรมล้มเหลว และคุณได้รับข้อยกเว้น "คำสั่งไม่ถูกต้อง" เหตุการณ์นี้เกิดขึ้นเนื่องจากบางฟังก์ชันไลบรารีคณิตศาสตร์ทศนิยมในขณะใช้งานจริง 2013 Visual C++ x64 C (CRT) ไม่ถูกต้องตรวจสอบว่า บางคำสั่ง AVX และ FMA3 รกฟังก์ชันพยายามใช้แฟ้มนั้น ถ้าคำสั่งนั้นไม่พร้อมใช้งาน การเรียกไปยังฟังก์ชันเหล่านี้ทำให้เกิดข้อยกเว้นคำสั่งไม่ถูกต้อง (0xc000001d) ฟังก์ชันที่ได้รับผลกระทบรวมล็อก log10 และ pow และอื่น ๆ

ปัญหานี้ไม่น่าจะเกิดขึ้นในสถานการณ์ต่อไปนี้:

  • บนระบบปฏิบัติการ Windows ที่สนับสนุน AVX รุ่นเก่ารัฐบันทึก (ตัวอย่างเช่น Windows Vista) ถ้า มีใช้บนคอมพิวเตอร์ที่สนับสนุนชุดคำสั่ง AVX

  • ถ้าบันทึกสถานะ AVX ถูกปิดการใช้งานอย่างชัดเจนในการกำหนดค่าระบบปฏิบัติการเริ่มต้นระบบ

  • ในแวดล้อม Preinstall Windows (Windows PE)

    หมายเหตุ Windows PE ไม่สนับสนุนการบันทึกสถานะ AVX


ปัญหานี้ได้ถูกรายงานบนการเชื่อมต่อของ Microsoft:

x64 ฟังก์ชัน log() ใช้คำสั่ง AVX vpsrlq แหล่งระบบปฏิบัติการ (ดังนั้นล้มเหลวบน Vista x64)

Visual Studio 2013 RTM: c ++ x64 รหัสข้อบกพร่องของการสร้างคำแนะนำ AVX2

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจากรันไทม์ของแอ 2013 Visual C++ x64 C ตรวจสอบว่า ระบบปฏิบัติการที่สนับสนุน AVX สถานะบันทึกก่อนที่จะพยายามเรียกใช้คำสั่ง AVX หรือ FMA3

การแก้ปัญหา

ถ้าทั้งหมดได้รับผลกระทบ c ++ไบนารีที่สร้างขึ้น โดยใช้ Visual C++ 2013 ใช้ DLL รันไทม์ของ C (msvcr120.dll), ติดตั้งการปรับปรุง Microsoft Visual C++ 2013 สามารถเผยแพร่ต่อ – 12.0.40660.0 หรือรุ่นที่ใหม่กว่า

ถ้าไบนารี c ++ของคุณได้รับผลกระทบแบบคงเชื่อมโยง Runtime C 2013 Visual C++ คุณต้องปรับปรุงการติดตั้ง 2013 Studio ภาพ ด้วยการติดตั้งโปรแกรมแก้ไขด่วน 3174417 และสร้างการปรับไบนารีได้รับผลกระทบ









หมายเหตุ ปัญหานี้ไม่มีผลต่อรุ่นที่เก่ากว่าของ Visual C++ C รันไทม์ของแอ (2012 Visual C++ และรุ่นก่อนหน้านี้) ปัญหาถูกแก้ไขก่อนที่จะนำออกใช้เริ่มต้นของจอภาพ CRT Universal ที่ใช้ โดย Visual C++ 2015

ศูนย์ดาวน์โหลดของ Microsoft

การปรับปรุงการเชื่อมโยงแบบคง Visual C++ 2013 C รันไทม์ 3174417 โปรแกรมแก้ไขด่วนถูกนำออกใช้เป็นการปรับปรุงการดาวน์โหลดเพียงอย่างเดียว และไม่แจกจ่ายผ่านทาง Windows Update มีอยู่ในเว็บไซต์ศูนย์ดาวน์โหลดของไมโครซอฟท์:

Download ดาวน์โหลดแพคเกจ

การปรับปรุงการเชื่อมโยงแบบไดนามิก Visual C++ 2013 C รันไทม์ Dll การปรับปรุงสามารถเผยแพร่ต่อจะพร้อมใช้งาน สำหรับข้อมูลเพิ่มเติม ดูบทความฐานความรู้ของ Microsoft ต่อไปนี้:

ปรับปรุง 3179560 สำหรับ 2013 Visual C++ และแพคเกจที่สามารถเผยแพร่ต่อ Visual C++

วิธีแก้ปัญหา

เมื่อต้องการหลีกเลี่ยงปัญหานี้ ปิดการใช้งาน FMA3 ในไลบรารีคณิตศาสตร์ถ้าคุณได้รับผลกระทบจากปัญหานี้ คุณสามารถสอบถามว่า ระบบสนับสนุนคำสั่ง AVX โดยเรียกGetEnabledXStateFeaturesและปิดใช้งาน AVX ในจอภาพแบบ CRT อย่างชัดแจ้ง โดยการโทรหา_set_FMA3_enable(0)

สำหรับข้อมูลเพิ่มเติม ดูการทำงานกับบริบท XStateบนเว็บไซต์ MSDN

ฟังก์ชัน_set_FMA3_enable(0)จะประกาศใน < math.h > และจะพร้อมใช้งานเฉพาะเมื่อคุณได้สร้างสำหรับ x64 เท่านั้น (นี้ปัญหาผลกระทบเฉพาะ x64 ไลบรารีนั้น) ซึ่งทำให้ไลบรารีคณิตศาสตร์เมื่อต้องการแปลงกลับไปใช้การใช้งานที่ไม่ใช่ FMA3

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×