SEGV_MAPERR은 무엇입니까?


답변:


198

잘못된 메모리 액세스로 인해 발생하는 오류 인 SEGV 에는 두 가지 일반적인 종류가 있습니다.

  1. 권한이 잘못된 페이지에 액세스했습니다. 예를 들어, 읽기 전용이지만 코드가 쓰기를 시도했습니다. 이것은 SEGV_ACCERR로보 고됩니다 .
  2. 응용 프로그램의 주소 공간에 전혀 매핑되지 않은 페이지에 액세스했습니다. 이는 종종 널 포인터 또는 작은 정수 값으로 손상된 포인터를 역 참조한 결과입니다. 이것은 SEGV_MAPERR로보 고됩니다 .

SEGV_MAPERR에 대한 일종의 문서 (인덱싱 된 Linux 소스 코드)는 http://lxr.free-electrons.com/ident?i=SEGV_MAPERR 입니다.


8
이것이 더 완전하고 도움 이 되는데stackoverflow.com/a/1000010/358475 가 답으로 표시됩니까?
OldPeculier 2015-04-28

2
질문 및 기타 답변이 내 답변보다 훨씬 오래되었습니다. 나는 적어도 그것을 개선하기 위해 다른 답변을 편집했습니다.
ahcox

EXC_BAD_ACCESS 예외 유형과 구별되는 상황을 아는 것은 흥미로울 것입니다. 예를 들어 페이지가 매핑되었지만 할당되지 않았습니까 (/ 최근 할당 해제 됨)?
Bobjt

6
한 가지 예 SEGV_MAPERR는 스택 오버플로입니다 (말장난 의도 없음). : D
안티 Haapala

2
더 많은 SEGV 유형이 있습니다. elixir.free-electrons.com/linux/latest/source/include/uapi/…
tomasz

40

세분화 오류입니다. 아마도 매달린 포인터 문제 또는 일종의 버퍼 오버플로 일 것입니다.

SIGSSEGV 문제, 세그멘테이션 오류를 기반으로이를 종료하는 신호입니다.

매달린 포인터와 오버플로 문제를 확인하십시오.

코어 덤프를 활성화하면 문제를 파악하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.