Episodio

Infracción de acceso C0000005

Una infracción de acceso es un tipo de excepción causada cuando una aplicación lee, escribe o ejecuta una dirección de memoria no válida.

El código de excepción es 0xC0000005

El primer parámetro de excepción (0) es el tipo de la infracción; Lectura (0), Escritura (1) o Ejecución (8)

El segundo parámetro de excepción (1) es la dirección de la infracción.

Siga estos pasos al depurar estos problemas con las herramientas de depuración para Windows:

  1. .exr -1
    • Código de excepción
    • Parameter[0] - Read (0), Write (1), Execute (8)
    • Parámetro[1] - Dirección
  2. .ecxr
    • Registrar valores en la infracción de acceso
    • Instrucción del ensamblador
      • Lectura: vea la expresión a la derecha de la coma.
      • Escritura: examine la expresión a la izquierda de la coma.
      • Ejecutar: examine la dirección de la expresión.
  3. k
    • Ver la pila de llamadas en la infracción de acceso

La dirección de memoria puede no ser válida debido a uno de estos escenarios comunes:

  • Puntero NULL: direcciones entre 0x0 y 0x10000 (64K): por ejemplo, una función que normalmente devuelve un puntero devuelto NULL (0x0) y se accedió al puntero sin comprobación.
  • Daños en la memoria: la dirección se sobrescribe errónea o malintencionadamente, normalmente a través de una saturación de búfer (o infraejecución)
  • Use-After-Free: la dirección era válida, pero ahora se tiene acceso después de liberar (datos) o descargar (código)
  • Volteo de bits: problema de RAM (hardware) en el que uno o varios bits se han volteado (poco frecuente)

Para ver problemas de lectura o escritura , consulte el episodio De lectura o escritura .
Para problemas de ejecución , consulte el episodio Ejecutar .

Tenga en cuenta que las aplicaciones CLR con inician una excepción System.NullReferenceException en lugar de una excepción de infracción de acceso cuando la dirección está entre 0x0 y 0x10000 (64K).

Recursos adicionales: