Odcinek
C0000005 naruszenia dostępu
Naruszenie dostępu jest typem wyjątku spowodowanego, gdy aplikacja odczytuje, zapisuje lub wykonuje nieprawidłowy adres pamięci.
Kod wyjątku jest 0xC0000005
Pierwszy parametr wyjątku (0) jest typem naruszenia; Odczyt (0), zapis (1) lub wykonanie (8)
Drugi parametr wyjątku (1) jest adresem naruszenia.
Wykonaj następujące kroki podczas debugowania tych problemów z narzędziami debugowania dla systemu Windows:
- .exr -1
- Kod wyjątku
- Parametr[0] — odczyt (0), zapis (1), wykonanie (8)
- Parametr[1] — adres
- .ecxr
- Rejestrowanie wartości w naruszeniem dostępu
- Instrukcja asemblera
- Odczyt — przyjrzyj się wyrażeniu po prawej stronie przecinka
- Zapis — przyjrzyj się wyrażeniu po lewej stronie przecinka
- Execute — przyjrzyj się adresowi wyrażenia
- K
- Wyświetlanie stosu wywołań przy naruszeniu dostępu
Adres pamięci może być nieprawidłowy z powodu jednego z następujących typowych scenariuszy:
- Wskaźnik null — adresy między 0x0 i 0x10000 (64K) — np. funkcja, która zwykle zwraca wskaźnik zwraca wartość NULL (0x0), a wskaźnik został wyświetlony bez weryfikacji
- Uszkodzenie pamięci — adres został błędnie lub złośliwie zastąpiony — często za pośrednictwem przeładu buforu (lub pod uruchamiania)
- Use-After-Free — adres był prawidłowy, ale jest teraz dostępny po jego uwolnieniu (danych) lub zwolnionym (kodzie)
- Bit-Flip — problem z pamięcią RAM (sprzęt) polegający na tym, że co najmniej jeden bit przerzucał (rzadko)
W przypadku problemów z odczytem lub zapisem zapoznaj się z odcinkiem Odczyt lub Zapis .
W przypadku problemów z wykonywaniem zapoznaj się z odcinkiem Execute(Wykonywanie ).
Należy pamiętać, że aplikacje CLR z zgłaszają wyjątek System.NullReferenceException zamiast wyjątku naruszenia dostępu, gdy adres znajduje się między 0x0 i 0x10000 (64K).
Zasoby dodatkowe:
- Wewnątrz — naruszenie zasad dostępu C0000005 — odczyt lub zapis
- Wewnątrz — C0000005 naruszenia dostępu — wykonywanie
- Wewnątrz — .exr
- Wewnątrz — .ecxr
- Wewnątrz — Zestaw Windows SDK
- Microsoft Docs — narzędzia debugowania dla systemu Windows
- Microsoft Docs — jak mogę debugować naruszenie dostępu w języku C++?
- Microsoft Docs — debugowanie kodu natywnego — często zadawane pytania
Naruszenie dostępu jest typem wyjątku spowodowanego, gdy aplikacja odczytuje, zapisuje lub wykonuje nieprawidłowy adres pamięci.
Kod wyjątku jest 0xC0000005
Pierwszy parametr wyjątku (0) jest typem naruszenia; Odczyt (0), zapis (1) lub wykonanie (8)
Drugi parametr wyjątku (1) jest adresem naruszenia.
Wykonaj następujące kroki podczas debugowania tych problemów z narzędziami debugowania dla systemu Windows:
- .exr -1
- Kod wyjątku
- Parametr[0] — odczyt (0), zapis (1), wykonanie (8)
- Parametr[1] — adres
- .ecxr
- Rejestrowanie wartości w naruszeniem dostępu
- Instrukcja asemblera
- Odczyt — przyjrzyj się wyrażeniu po prawej stronie przecinka
- Zapis — przyjrzyj się wyrażeniu po lewej stronie przecinka
- Execute — przyjrzyj się adresowi wyrażenia
- K
- Wyświetlanie stosu wywołań przy naruszeniu dostępu
Adres pamięci może być nieprawidłowy z powodu jednego z następujących typowych scenariuszy:
- Wskaźnik null — adresy między 0x0 i 0x10000 (64K) — np. funkcja, która zwykle zwraca wskaźnik zwraca wartość NULL (0x0), a wskaźnik został wyświetlony bez weryfikacji
- Uszkodzenie pamięci — adres został błędnie lub złośliwie zastąpiony — często za pośrednictwem przeładu buforu (lub pod uruchamiania)
- Use-After-Free — adres był prawidłowy, ale jest teraz dostępny po jego uwolnieniu (danych) lub zwolnionym (kodzie)
- Bit-Flip — problem z pamięcią RAM (sprzęt) polegający na tym, że co najmniej jeden bit przerzucał (rzadko)
W przypadku problemów z odczytem lub zapisem zapoznaj się z odcinkiem Odczyt lub Zapis .
W przypadku problemów z wykonywaniem zapoznaj się z odcinkiem Execute(Wykonywanie ).
Należy pamiętać, że aplikacje CLR z zgłaszają wyjątek System.NullReferenceException zamiast wyjątku naruszenia dostępu, gdy adres znajduje się między 0x0 i 0x10000 (64K).
Zasoby dodatkowe:
- Wewnątrz — naruszenie zasad dostępu C0000005 — odczyt lub zapis
- Wewnątrz — C0000005 naruszenia dostępu — wykonywanie
- Wewnątrz — .exr
- Wewnątrz — .ecxr
- Wewnątrz — Zestaw Windows SDK
- Microsoft Docs — narzędzia debugowania dla systemu Windows
- Microsoft Docs — jak mogę debugować naruszenie dostępu w języku C++?
- Microsoft Docs — debugowanie kodu natywnego — często zadawane pytania