2009-06-16 29 views

답변

35

세분화 오류입니다. 대부분 포인터가 매달려 있거나 버퍼 오버 플로우가 발생했을 수 있습니다.

SIGSSEGV은 세그먼트 화 오류를 기반으로 신호를 종결하는 신호입니다.

오버 플로우 문제뿐만 아니라 매달린 포인터가 있는지 확인하십시오.

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

117

잘못된 메모리 액세스의 결과 오류가 SEGV의 일반적인 두 가지 종류가 있습니다

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

SEGV_MAPERR에 대한 정렬 (색인 생성 된 Linux 소스 코드) 문서는 여기 http://lxr.free-electrons.com/ident?i=SEGV_MAPERR입니다.

+7

이것이 더 완벽하고 도움이 될 때 http://stackoverflow.com/a/1000010/358475가 답변으로 표시된 이유는 무엇입니까? – OldPeculier

+2

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

+0

EXC_BAD_ACCESS 예외 유형과 구별되는 상황을 아는 것은 흥미로울 것입니다. 예 : 매핑되었지만 할당되지 않은 페이지입니까? (최근에 할당 취소 되었습니까?) – Bobjt