Episodio
Access Violation C0000005
Una violazione di accesso è un tipo di eccezione causato quando un'applicazione legge, scrive o esegue un indirizzo di memoria non valido.
Il codice eccezione è 0xC0000005
Il primo parametro eccezione (0) è il tipo della violazione; Lettura (0), Scrittura (1) o Esecuzione (8)
Il secondo parametro eccezione (1) è l'indirizzo della violazione.
Per eseguire il debug di questi problemi con gli strumenti di debug per Windows, seguire questa procedura:
- .exr -1
- Codice eccezione
- Parametro[0] - Lettura (0), Scrittura (1), Esecuzione (8)
- Parametro[1] - Indirizzo
- .ecxr
- Registrare i valori in Violazione di accesso
- Istruzioni dell'assembler
- Lettura: esaminare l'espressione a destra della virgola
- Write: esaminare l'espressione a sinistra della virgola
- Execute: esaminare l'indirizzo dell'espressione
- k
- Visualizzare lo stack di chiamate in corrispondenza della violazione di accesso
L'indirizzo di memoria potrebbe non essere valido a causa di uno di questi scenari comuni:
- Puntatore NULL: indirizzi tra 0x0 e 0x10000 (64K), ad esempio una funzione che restituisce in genere un puntatore restituito NULL (0x0) e il puntatore è stato eseguito senza verifica
- Danneggiamento della memoria : l'indirizzo è stato erroneamente sovrascritto o dannoso, in genere tramite un sovraccarico del buffer (o sottorun)
- Use-After-Free: l'indirizzo è valido , ma ora è accessibile dopo che è stato liberato (dati) o scaricato (codice)
- Bit-Flip - Problema di RAM (hardware) in cui uno o più bit hanno capovolto (raro)
Per i problemi di lettura o scrittura , vedere l'episodio Lettura o Scrittura .
Per Problemi di esecuzione , fare riferimento all'episodio Esegui .
Si noti che le applicazioni CLR con generano un'eccezione System.NullReferenceException anziché un'eccezione di violazione di accesso quando l'indirizzo è compreso tra 0x0 e 0x10000 (64K).
Risorse aggiuntive:
- Interno - Violazione di accesso C0000005 - Lettura o scrittura
- Inside - Access Violation C0000005 - Execute
- Interno - .exr
- Inside - .ecxr
- Inside - Windows SDK
- Microsoft Docs - Strumenti di debug per Windows
- Microsoft Docs- Come è possibile eseguire il debug di una violazione di accesso C++?
- Microsoft Docs - Domande frequenti sul debug del codice nativo
Una violazione di accesso è un tipo di eccezione causato quando un'applicazione legge, scrive o esegue un indirizzo di memoria non valido.
Il codice eccezione è 0xC0000005
Il primo parametro eccezione (0) è il tipo della violazione; Lettura (0), Scrittura (1) o Esecuzione (8)
Il secondo parametro eccezione (1) è l'indirizzo della violazione.
Per eseguire il debug di questi problemi con gli strumenti di debug per Windows, seguire questa procedura:
- .exr -1
- Codice eccezione
- Parametro[0] - Lettura (0), Scrittura (1), Esecuzione (8)
- Parametro[1] - Indirizzo
- .ecxr
- Registrare i valori in Violazione di accesso
- Istruzioni dell'assembler
- Lettura: esaminare l'espressione a destra della virgola
- Write: esaminare l'espressione a sinistra della virgola
- Execute: esaminare l'indirizzo dell'espressione
- k
- Visualizzare lo stack di chiamate in corrispondenza della violazione di accesso
L'indirizzo di memoria potrebbe non essere valido a causa di uno di questi scenari comuni:
- Puntatore NULL: indirizzi tra 0x0 e 0x10000 (64K), ad esempio una funzione che restituisce in genere un puntatore restituito NULL (0x0) e il puntatore è stato eseguito senza verifica
- Danneggiamento della memoria : l'indirizzo è stato erroneamente sovrascritto o dannoso, in genere tramite un sovraccarico del buffer (o sottorun)
- Use-After-Free: l'indirizzo è valido , ma ora è accessibile dopo che è stato liberato (dati) o scaricato (codice)
- Bit-Flip - Problema di RAM (hardware) in cui uno o più bit hanno capovolto (raro)
Per i problemi di lettura o scrittura , vedere l'episodio Lettura o Scrittura .
Per Problemi di esecuzione , fare riferimento all'episodio Esegui .
Si noti che le applicazioni CLR con generano un'eccezione System.NullReferenceException anziché un'eccezione di violazione di accesso quando l'indirizzo è compreso tra 0x0 e 0x10000 (64K).
Risorse aggiuntive:
- Interno - Violazione di accesso C0000005 - Lettura o scrittura
- Inside - Access Violation C0000005 - Execute
- Interno - .exr
- Inside - .ecxr
- Inside - Windows SDK
- Microsoft Docs - Strumenti di debug per Windows
- Microsoft Docs- Come è possibile eseguire il debug di una violazione di accesso C++?
- Microsoft Docs - Domande frequenti sul debug del codice nativo
Per inviare suggerimenti, Invia un problema qui.