การแก้ไข: พฤติกรรมที่ไม่คาดคิดเมื่อคุณเรียกใช้โปรแกรมประยุกต์ Visual Studio 2008 Service Pack 1 ที่สร้างขึ้นที่เรียกฟังก์ชัน setjmp หรือ longjmp ฟังก์ชันในแฟ้มต้นฉบับ


อาการ


พิจารณาสถานการณ์ต่อไปนี้:
  • คุณเปิดใช้งานตัวเลือกการปรับให้เหมาะสมสากล (/Og) การเปิดใช้งานหนึ่งในตัวเลือกต่อไปนี้:
    • /O1 
    • /O2 
    • /Ox 
  • คุณสามารถสร้างแฟ้มต้นฉบับ Visual C++ ของ Microsoft โดยใช้ Microsoft Visual Studio 2008 Service Pack 1 (SP1)
  • แฟ้มต้นฉบับเรียกฟังก์ชันsetjmpฟังก์ชันlongjmpหรือฟังก์ชันทั้งสอง
ในสถานการณ์สมมตินี้ คอมไพเลอร์อาจใช้ออฟเซ็ตกองซ้อนเดียวกันเพื่อเก็บตัวแปรภายในเครื่องที่แตกต่างกัน ดังนั้น ลักษณะการทำงานที่ไม่คาดคิดอาจเกิดขึ้นเมื่อคุณเรียกใช้โปรแกรมประยุกต์ที่สร้างขึ้น

สาเหตุ


ปัญหานี้เกิดขึ้นเนื่องจากตัวเพิ่มประสิทธิภาพที่ใช่แอคเคาท์สำหรับsetjmpฟังก์ชันหรือฟังก์ชันlongjmp ซึ่งทำให้ตัวเพิ่มประสิทธิภาพการคำนวณอายุการใช้งานของตัวแปรภายในเครื่องไม่ถูกต้อง เมื่อมีการเปลี่ยนแปลง ตัวแปรหนึ่งตัวแปรอื่นสามารถเปลี่ยนโดยไม่คาดคิดนั้น

การแก้ไข


ข้อมูลโปรแกรมแก้ไขด่วน

มีโปรแกรมแก้ไขด่วนที่รองรับพร้อมให้บริการจาก Microsoft อย่างไรก็ตาม โปรแกรมแก้ไขด่วนนี้มุ่งหวังเพื่อการแก้ไขปัญหาที่อธิบายไว้ในบทความนี้เท่านั้น ใช้การแก้ไขด่วนนี้กับระบบต่าง ๆ ที่พบปัญหาอธิบายไว้ในบทความนี้เท่านั้น โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณไม่ได้รับผลกระทบจากปัญหานี้รุนแรง เราขอแนะนำให้ คุณรอการปรับปรุงซอฟต์แวร์ถัดไปที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ เมื่อต้องการแก้ไขปัญหานี้ทันที ติดต่อฝ่ายบริการสนับสนุนลูกค้าของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายชื่อทั้งหมด ของหมายเลขโทรศัพท์ของฝ่ายบริการลูกค้าและการสนับสนุนของ Microsoft หรือเพื่อสร้างการร้องขอบริการแยกต่างหาก แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้: หมายเหตุ ในกรณีพิเศษ ค่าบริการที่เรียกเก็บตามปกติเมื่อโทรติดต่อฝ่ายสนับสนุนอาจจะยกเลิกได้หาก Microsoft Support Professional ตัดสินว่าโปรแกรมปรับปรุงที่เฉพาะเจาะจงจะแก้ไขปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนตามปกติจะใช้กับคำถามและปัญหาในการสนับสนุนเพิ่มเติมซึ่งไม่สอดคล้องตามเกณฑ์สำหรับโปรแกรมปรับปรุงเฉพาะที่เกี่ยวข้อง เมื่อต้องการดาวน์โหลดโปรแกรมแก้ไขด่วนนี้จากแกลเลอรีรหัส Microsoft Developer Network (MSDN) แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้:หมายเหตุ แกลเลอรีรหัส MSDN แสดงภาษาซึ่งโปรแกรมแก้ไขด่วนพร้อมใช้งานสำหรับภาษานั้น ถ้าคุณไม่เห็นภาษาของคุณปรากฏ อาจเป็น เพราะหน้าแกลเลอรีของรหัสทรัพยากรจะไม่พร้อมใช้งานสำหรับภาษานั้น หรือ คุณสามารถดาวน์โหลดโปรแกรมแก้ไขด่วนนี้ได้จากเว็บไซต์ Microsoft การเชื่อมต่อต่อไปนี้:

ข้อกำหนดเบื้องต้น

เมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ คุณต้องมี Microsoft Visual Studio 2008 Service Pack 1 ติดตั้งอยู่

ข้อมูลการเริ่มระบบใหม่

คุณไม่ต้องรีสตาร์ทเครื่องคอมพิวเตอร์หลังจากที่คุณติดตั้งโปรแกรมแก้ไขด่วนนี้ถ้าคุณได้หยุดอินสแตนซ์ทั้งหมดของ Visual Studio

ข้อมูลการแทนที่โปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนนี้ไม่ได้ใช้แทนโปรแกรมแก้ไขด่วนที่มีการนำออกใช้ก่อนหน้านี้

ข้อมูลไฟล์

ไฟล์การติดตั้งโปรแกรมแก้ไขด่วนรุ่นที่ใช้งานทั่วโลกจะมีคุณลักษณะตามที่แสดงในตารางต่อไปนี้ วันที่และเวลาสำหรับไฟล์เหล่านี้จะแสดงอยู่ใน Coordinated Universal Time (UTC) วันที่และเวลาสำหรับไฟล์นี้ในคอมพิวเตอร์ท้องถิ่นจะแสดงเวลาท้องถิ่นของคุณพร้อมกับเวลาออมแสงปัจจุบัน (DST) นอกจากนี้ วันที่และเวลาอาจเปลี่ยนแปลงเมื่อคุณดำเนินการบางอย่างในไฟล์
ชื่อไฟล์รุ่นของไฟล์ขนาดของแฟ้มวันที่เวลาแพลตฟอร์ม
C2.dll15.0.30729.61472,283,84025-ก.พ.-201101:25x86
C2.dll15.0.30729.61472,362,68825-ก.พ.-201101:25x86
C2.dll15.0.30729.61472,493,24825-ก.พ.-201101:25x86
C2.dll15.0.30729.61473,018,04825-ก.พ.-201101:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025-ก.พ.-201101:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

การแก้ปัญหา


เมื่อต้องการหลีกเลี่ยงปัญหานี้ เตรียมใช้งานตัวแปรท้องถิ่นในช่วงต้นของฟังก์ชันเพื่อให้คอมไพเลอร์สามารถทราบถึงอายุการใช้งานตัวแปร

สถานะ


Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

ข้อมูลเพิ่มเติม


สำหรับข้อมูลเพิ่มเติมเกี่ยวกับศัพท์เฉพาะในการปรับปรุงซอฟต์แวร์ ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
824684 คำอธิบายของคำศัพท์มาตรฐานที่ใช้เพื่ออธิบายโปรแกรมปรับปรุงซอฟต์แวร์ของ Microsoft