Episódio

Violação de acesso C0000005

Uma violação de acesso é um tipo de exceção causada quando um aplicativo lê, grava ou executa um endereço de memória inválido.

O código de exceção é 0xC0000005

O primeiro parâmetro de exceção (0) é o tipo da violação; Ler (0), Gravar (1) ou Executar (8)

O segundo parâmetro de exceção (1) é o endereço da violação.

Siga estas etapas ao depurar esses problemas com as Ferramentas de Depuração para Windows:

  1. .exr -1
    • Código de Exceção
    • Parâmetro[0] - Leitura (0), Gravação (1), Execução (8)
    • Parâmetro[1] - Endereço
  2. .ecxr
    • Registrar valores na Violação de Acesso
    • Instrução do montador
      • Leia - veja a expressão à direita da vírgula
      • Escrever - veja a expressão à esquerda da vírgula
      • Executar - veja o endereço da expressão
  3. k
    • Exibir a pilha de chamadas na violação de acesso

O endereço de memória pode ser inválido devido a um destes cenários comuns:

  • Ponteiro NULL - endereços entre 0x0 e 0x10000 (64K) - por exemplo, uma função que geralmente retorna um ponteiro retornou NULL (0x0), e o ponteiro foi acessado sem verificação
  • Corrupção de memória - o endereço foi substituído por engano ou mal-intencionado - geralmente por meio de uma saturação de buffer (ou underrun)
  • Use-After-Free - o endereço era válido, mas agora está sendo acessado depois que é liberado (dados) ou descarregado (código)
  • Bit-Flip - Problema de RAM (hardware) em que um ou mais bits foram invertidos (raros)

Para problemas de leitura ou gravação, consulte o episódio de leitura ou gravação.
Para problemas de execução , consulte o episódio Executar .

Observe que os aplicativos CLR com lançam uma exceção System.NullReferenceException em vez de uma exceção de violação de acesso quando o endereço está entre 0x0 e 0x10000 (64K).

Recursos adicionais:

Tem comentários? Envie um problema aqui.