Epizoda

Porušení přístupu C0000005

Porušení přístupu je typ výjimky způsobené čtením, zápisem nebo spuštěním neplatné adresy paměti aplikace.

Kód výjimky je 0xC0000005

První parametr výjimky (0) je typ porušení; Čtení (0), zápis (1) nebo spuštění (8)

Druhý parametr výjimky (1) je adresa porušení.

Při ladění těchto problémů s nástroji ladění pro Windows postupujte takto:

  1. .exr -1
    • Kód výjimky
    • Parametr[0] – čtení (0), zápis (1), provedení (8)
    • Parametr[1] – adresa
  2. .ecxr
    • Registrace hodnot při porušení přístupu
    • Instrukce assembleru
      • Čtení – podívejte se na výraz napravo od čárky.
      • Zápis – podívejte se na výraz vlevo od čárky.
      • Provést – podívejte se na adresu výrazu.
  3. K
    • Zobrazení zásobníku volání při porušení přístupu

Adresa paměti může být neplatná kvůli některému z těchto běžných scénářů:

  • Ukazatel NULL – adresy mezi 0x0 a 0x10000 (64K) – například funkce, která obvykle vrací ukazatel vrácený hodnotou NULL (0x0) a ukazatel byl přístupný bez ověření.
  • Poškození paměti – adresa byla omylem nebo zlými úmysly přepsána – běžně prostřednictvím přetečení vyrovnávací paměti (nebo podtečení)
  • Use-After-Free – adresa byla platná, ale teď se k ní přistupuje po uvolnění (dat) nebo uvolnění (kód)
  • Bit-Flip – Problém s pamětí RAM (hardware), kdy se jeden nebo více bitů překlopil (vzácné)

Informace o problémech se čtením nebo zápisem najdete v epizodě čtení nebo zápisu.
Informace o problémech s provedením najdete v epizodě Execute .

Všimněte si, že aplikace CLR s vyvolá system.NullReferenceException výjimka místo výjimky Porušení přístupu, pokud je adresa mezi 0x0 a 0x10000 (64K).

Další zdroje:

Chcete se podělit o svůj názor? Tady můžete odeslat problém.