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:

  1. .exr -1
    • Codice eccezione
    • Parametro[0] - Lettura (0), Scrittura (1), Esecuzione (8)
    • Parametro[1] - Indirizzo
  2. .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
  3. 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: