Poprawka: Komunikat "Błąd nieprawidłowej strony w module MSVCRT. Biblioteka DLL"komunikat o błędzie po zainstalowaniu biblioteki run-time z Visual C++ 6.0


Objawy


Po zainstalowaniu na komputerze bibliotek C Runtime (Msvcrt.dll) z Visual C++ 6.0, aplikacje, które wcześniej uruchomiono poprawnie fail i podobny do następującego błędu aplikacji pojawia się:
< nazwa aplikacji > spowodował błąd nieprawidłowej strony w module MSVCRT. DLL pod adresem XXXX:XXXXXXXX.

Przyczyna


Jedną z możliwych przyczyn tego błędu jest to, że aplikacja ma napisane w przeszłości blok pamięci, która jest własnością określonego obiektu. Menedżer heapmemory małych bloku, który jest dostarczany z biblioteki uruchomieniowe Visual C++ 6.0 zawiera sterty struktur kontroli w ramach sterty małych bloku. Zastępowanie blok pamięci zmienia adresy wskaźnik stosu małych bloku, dokonujące Zły wskaźnik i ewentualnie usterek w Msvcrt.dll, gdy odwołuje się wskaźnik.

Rozwiązanie


Dostawców aplikacji należy upewnić się, że ich aplikacje używają sterty małych bloku wykonywania C poprawnie.

Aby pomóc klientom, którzy występuje problem w aplikacjach innych firm, firma Microsoft wydała nową C Runtime biblioteki dołączanej dynamicznie (DLL), Msvcrt.dll, która implementuje dwie menedżerów sterty: menedżera sterty 5.0 zgodnej wersji języka Visual C++ i Menedżera sterty 6.0 zgodnej wersji programu Visual C++. Msvcrt.dll wykrywa, która wersja programu Visual C++ jest zbudowany z aplikacji i używa menedżera sterty odpowiednie dla tej aplikacji. Jeśli wersja jest Visual C++ 6.0 lub nowszy, menedżera sterty zgodnej wersji 6.0 Visual C++ jest stosowany; Jeśli wersja jest starszy niż wersja 6.0, Visual C++ sterty zgodnej wersji 5.0 jest używany.

Użytkownicy programu Visual Studio 6.0 można uzyskać nowy plik Msvcrt.dll, instalując najnowszy program Microsoft Visual Studio dodatku Service Pack. Jeśli nie używasz programu Visual Studio, należy zainstalować aktualizację biblioteki Microsoft; Aby uzyskać dodatkowe informacje zobacz następujący artykuł z bazy wiedzy Microsoft Knowledge Base:
Aktualizowanie biblioteki Microsoft 197298 : co, gdzie, dlaczego

Stan


Firma Microsoft potwierdziła, że jest to usterka występująca w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".

Ten problem został rozwiązany w dodatku Service Pack 3 dla programu Visual Studio 6.0.
Aby uzyskać więcej informacji dotyczących dodatków service Pack dla programu Visual Studio kliknij następujące numery artykułów w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:

Usługi programu visual Studio 6.0 194022 pakiety, co, gdzie, dlaczego

194295 jak stwierdzić, że jest zainstalowany dodatek service pack dla programu Visual Studio

Więcej informacji


Sterty małych bloku obejmuje przydziały, które są mniej niż 1K w rozmiarze. Błędy tego rodzaju mogą zachowywać się inaczej w starszych wersjach biblioteki wykonawczej C ponieważ struktur kontroli znajdują się w innej, oddzielnych lokalizacji w pamięci. Często te rodzaje kodowania błędy spowodować uszkodzenie innego bloku pamięci i ewentualnie awarii. Sekwencja zdarzeń, które mogą prowadzić do naruszenia zasad dostępu są różne, korzystając z bibliotek Visual C++ 6.0 C Runtime.

Problemy tego typu można sterować za pomocą stosu debugowania. Można znaleźć w dokumentacji online pod tytułem "Przy użyciu stosu debugowania." Należy włączyć debugowanie sterty przez wywołanie _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK-_ALWAYS_DF) w czasie procesu inicjowania w trybie debugowania aplikacji.