에피소드

액세스 위반 C0000005

액세스 위반은 애플리케이션이 잘못된 메모리 주소를 읽거나 쓰거나 실행할 때 발생하는 예외 유형입니다.

예외 코드가 0xC0000005

첫 번째 예외 매개 변수(0)는 위반 유형입니다. 읽기(0), 쓰기(1) 또는 실행(8)

두 번째 예외 매개 변수(1)는 위반의 주소입니다.

Windows용 디버깅 도구에서 이러한 문제를 디버깅할 때 다음 단계를 수행합니다.

  1. .exr -1
    • 예외 코드
    • Parameter[0] - 읽기(0), 쓰기(1), 실행(8)
    • Parameter[1] - Address
  2. .ecxr
    • 액세스 위반 시 값 등록
    • 어셈블러 명령
      • 읽기 - 쉼표 오른쪽에 있는 식을 확인합니다.
      • 쓰기 - 쉼표의 왼쪽에 있는 식을 확인합니다.
      • Execute - 식의 주소 보기
  3. k
    • 액세스 위반 시 호출 스택 보기

다음과 같은 일반적인 시나리오 중 하나로 인해 메모리 주소가 잘못되었을 수 있습니다.

  • NULL 포인터 - 0x0 및 0x10000(64K) 사이의 주소 - 예를 들어 일반적으로 반환된 NULL(0x0) 포인터를 반환하는 함수이며 포인터는 확인 없이 액세스되었습니다.
  • 메모리 손상 - 주소가 실수로 또는 악의적으로 덮어쓰여졌는데, 일반적으로 버퍼 오버런(또는 언더런)을 통해
  • 무료 사용 - 주소 유효했지만 해제(데이터) 또는 언로드(코드) 후에 액세스되고 있습니다.
  • 비트 대칭 이동 - 하나 이상의 비트가 대칭 이동된 RAM(하드웨어) 문제(드문 경우)

읽기 또는 쓰기 문제는 읽기 또는 쓰기 에피소드를 참조하세요.
실행 문제는 실행 에피소드를 참조하세요.

주소가 0x0 및 0x10000(64K) 사이에 있는 경우 액세스 위반 예외 대신 System.NullReferenceException 예외를 throw하는 CLR 애플리케이션에 유의하세요.

추가 리소스:

의견이 있으신가요? 여기에서 문제를 제출합니다.