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:
- .exr -1
- Kód výjimky
- Parametr[0] – čtení (0), zápis (1), provedení (8)
- Parametr[1] – adresa
- .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.
- 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:
- Uvnitř – porušení přístupu C0000005 – čtení nebo zápis
- Uvnitř – Porušení přístupu C0000005 – Provést
- Uvnitř - .exr
- Uvnitř - .ecxr
- Uvnitř – Windows SDK
- Dokumentace Microsoftu – Nástroje pro ladění pro Windows
- Dokumentace Microsoftu – Jak můžu ladit porušení přístupu jazyka C++?
- Microsoft Docs – Nejčastější dotazy k ladění nativního kódu
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:
- .exr -1
- Kód výjimky
- Parametr[0] – čtení (0), zápis (1), provedení (8)
- Parametr[1] – adresa
- .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.
- 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:
- Uvnitř – porušení přístupu C0000005 – čtení nebo zápis
- Uvnitř – Porušení přístupu C0000005 – Provést
- Uvnitř - .exr
- Uvnitř - .ecxr
- Uvnitř – Windows SDK
- Dokumentace Microsoftu – Nástroje pro ladění pro Windows
- Dokumentace Microsoftu – Jak můžu ladit porušení přístupu jazyka C++?
- Microsoft Docs – Nejčastější dotazy k ladění nativního kódu