การแก้ไข: คุณได้รับเป็น "ไม่ถูกต้องเพจฟอลต์ในโมดูล MSVCRT ข้อผิดพลาด DLL"หลังจากที่คุณติดตั้งไลบรารีรันไทม์จาก 6.0 Visual C++


อาการ


หลังจากที่คุณติดตั้งไลบรารีรันไทม์ของ C (Msvcrt.dll) จาก 6.0 Visual C++ บนคอมพิวเตอร์ของคุณ โปรแกรมประยุกต์ที่สามารถเรียกใช้ได้ก่อนหน้านี้ ได้อย่างถูกต้องล้มเหลวและมีแอพลิเคชันข้อผิดพลาดคล้ายกับต่อไปนี้ปรากฏขึ้น:
<ชื่อโปรแกรมประยุกต์ > เกิดมีข้อบกพร่องของเพจไม่ถูกต้องในโมดู MSVCRT DLL ที่ XXXX:XXXXXXXX

สาเหตุ


สาเหตุหนึ่งที่เป็นไปได้ของข้อผิดพลาดนี้คือ ว่า แอพลิเคชันมีเขียนบล็อกของหน่วยความจำที่เป็นเจ้าของวัตถุใดวัตถุหนึ่งที่ผ่านมา ผู้จัดการบล็อกขนาดเล็ก heapmemory ที่มาพร้อมกับไลบรารีรันไทม์ Visual C++ 6.0 รวมฮีปโครงสร้างการควบคุมภายในฮีปบล็อกขนาดเล็ก บล็อกของหน่วยความจำเขียนทับการเปลี่ยนแปลงที่อยู่ตัวชี้บล็อกเล็กฮีป effecting ตัวชี้ไม่ถูกต้อง และอาจมีข้อบกพร่องใน Msvcrt.dll เมื่อมีการอ้างอิงตัวชี้

การแก้ปัญหา


ผู้จำหน่ายโปรแกรมประยุกต์ที่จำเป็นเพื่อให้แน่ใจว่า โปรแกรมประยุกต์กำลังใช้ฮีปบล็อกเล็ก C ขณะทำงานอย่างถูกต้อง

เพื่อช่วยลูกค้าที่พบปัญหานี้ในโปรแกรมประยุกต์ของบริษัทอื่น Microsoft ได้นำออกใช้ใหม่รันไทม์ของ C ไดนามิกลิงค์ไลบรารี (DLL), Msvcrt.dll ซึ่งประมวลผลผู้จัดการ heap สอง: ตัวจัดการ Visual C++ รุ่นฮีปที่เข้ากันได้กับ 5.0 และ Visual C++ รุ่นเข้ากันได้กับ 6.0 heap manager Msvcrt.dll ตรวจพบรุ่นของ Visual C++ แอพลิเคชันของคุณขึ้นอยู่กับ และใช้ที่เหมาะสม heap manager สำหรับโปรแกรมประยุกต์นั้น ถ้ารุ่น 6.0 หรือมากกว่า Visual C++, heap เข้ากันได้กับ 6.0 manager Visual C++ จะใช้ ถ้ารุ่นเก่ากว่ารุ่น 6.0 ฮีปเข้ากันได้กับ 5.0 Visual C++ จะใช้

ผู้ใช้ของ visual Studio 6.0 สามารถรับแฟ้ม Msvcrt.dll ใหม่ ด้วยการติดตั้งล่าสุด Microsoft Visual Studio Service Pack ถ้าคุณไม่ได้ใช้ Visual Studio ติดตั้งการปรับปรุงในไลบรารี Microsoft สำหรับข้อมูลเพิ่มเติม ดูบทความในฐานความรู้ของ Microsoft ต่อไปนี้:
การปรับปรุงไลบรารี Microsoft 197298 : สิ่ง ที่ เหตุ

สถานะ


Microsoft ยืนยันว่า นี่คือจุดบกพร่องในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "ใช้กับ"

บักนี้ถูกแก้ไขใน Visual Studio 6.0 Service Pack 3
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Visual Studio เซอร์วิสแพ็ค คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

บริการ Studio 6.0 ที่แสดงผล194022ชุดรวม อะไร ที่ เหตุ

วิธีการ194295เพื่อบอกให้ทราบว่า มีการติดตั้งเซอร์วิสแพ็ค Visual Studio

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


ฮีปบล็อกขนาดเล็กประกอบด้วยการปันส่วนที่มีขนาดน้อยกว่า 1K บักของลักษณะนี้อาจทำงานแตกต่างออกไปในเวอร์ชันก่อนหน้านี้ของไลบรารีรันไทม์ของ C ได้เนื่องจากโครงสร้างการควบคุมจะอยู่ในตำแหน่งที่แตกต่างกัน และแยกต่างหากในหน่วยความจำ มักจะ ชนิดของข้อผิดพลาดในการเขียนโค้ดเหล่านี้ทำให้เกิดความเสียหายของบล็อกอื่นของหน่วยความจำ และอาจเกิดความเสียหาย ลำดับของเหตุการณ์ที่นำไปสู่การละเมิดการเข้าถึงแตกต่างกันเมื่อคุณใช้ไลบรารีรันไทม์ C 6.0 Visual C++

คุณสามารถควบคุมชนิดของปัญหาเหล่านี้ได้ โดยใช้ดีบักฮีป โปรดดูเอกสารประกอบแบบออนไลน์ที่ชื่อว่า "ฮีปตรวจแก้จุดบกพร่องโดยใช้" คุณจำเป็นต้องเปิดใช้งานดีบักฮีป โดยเรียก _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK _ALWAYS_DF) ในกระบวนการการเตรียมใช้งานในการสร้างการตรวจแก้จุดบกพร่องของโปรแกรมประยุกต์ของคุณ