KORRIGERING: Du får ett ”ogiltigt sidfel i modul MSVCRT. ”DLL” felmeddelande när du installerar Runtime-bibliotek från Visual C++ 6.0


Symptom


När du har installerat C Runtime-bibliotek (Msvcrt.dll) från Visual C++ 6.0 på datorn, program som tidigare körde korrekt misslyckas och ett fel av följande slag visas:
< programnamn > orsakade ett ogiltigt sidfel i modul MSVCRT. DLL på xxxxxxxx.

Orsak


En möjlig orsak till detta fel är att programmet har skrivit tidigare minnesområde som ägs av ett visst objekt. Litet block heapmemory chef som levereras tillsammans med Visual C++ 6.0 Runtime-bibliotek omfattar heap kontrollstrukturer inom små block-heap. Skriva över blocket minne ändras litet block heap pekaren adresser, verkställer en ogiltig pekare och eventuellt fel i Msvcrt.dll när pekaren refererar till.

Lösning


Leverantörer måste du se till att deras program använder C körning small block heap på rätt sätt.

Microsoft har publicerat en ny C Runtime dynamiska länkbiblioteket (DLL), Msvcrt.dll som implementerar två heap-chefer för att hjälpa kunder som drabbas av problemet i deras tredjepartsprogram: Visual C++ version 5.0-kompatibla heap-hanteraren och Visual C++ version 6.0-kompatibla heap-hanteraren. Msvcrt.dll identifierar vilken version av Visual C++ som programmet har byggts med och använder rätt heap-hanteraren för programmet. Om versionen är Visual C++ 6.0 eller senare, används Visual C++ 6.0-kompatibla heap-hanteraren. Om versionen är tidigare än version 6.0, används Visual C++ 5.0-kompatibla heap.

Visual Studio 6.0-användare kan hämta filen Msvcrt.dll genom att installera den senaste Microsoft Visual Studio Service Pack. Om du inte använder Visual Studio uppdateringen Microsoft bibliotek; Mer information finns i följande artikel i Microsoft Knowledge Base:
Uppdatera 197298 -Microsoft-bibliotek: vad, var, varför

Status


Microsoft har bekräftat att detta är ett programfel i Microsoft-produkterna som nämns i avsnittet ”gäller”.

Det här programfelet korrigerades i Visual Studio 6.0 Service Pack 3.
Mer information om service Pack-uppdateringar för Visual Studio klickar du på följande artikelnummer och läser artiklarna i Microsoft Knowledge Base:

194022 visual Studio 6.0 service Pack-uppdateringar, var, varför

194295 så att en Visual Studio service pack är installerat

Mer Information


Litet block heap omfattar allokeringar som är mindre än 1 kB. Fel av detta slag kan fungera annorlunda i äldre versioner av C körningsbibliotek eftersom kontrollstrukturer finns i en annan och separat plats i minnet. Dessa typer av kodning fel leder ofta skadas av ett annat block av minne och eventuellt en krasch. Sekvensen av händelser som kan leda till ett åtkomstfel skiljer sig när du använder Visual C++ 6.0 C Runtime-bibliotek.

Du kan styra dessa typer av problem med debug-heap. Finns i onlinedokumentationen som heter ”använda Debug-Heap”. Du måste aktivera debug-heap genom att anropa _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK _ALWAYS_DF) vid initieringen av processen i en debug-version av programmet.