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:

  1. .exr -1
    • Kod wyjątku
    • Parametr[0] — odczyt (0), zapis (1), wykonanie (8)
    • Parametr[1] — adres
  2. .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
  3. 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:

Chcesz przesłać opinię? Prześlij problem tutaj.