2015-02-07 2 views
0

내 코드를 실행하면 충돌이 발생하고 "Segmentation fault"라고 표시됩니다.C에서 다중 신호로 인해 세그먼트 오류가 발생합니까?

그러나 gdb에서 실행하면 SIGSEGV가 아닌 SIGABRT 오류로 인해 충돌이 발생합니다.

터미널의 일반적인 세그먼트 오류 오류에도 "매핑"되는 다른 신호가 있습니까?

+0

디버깅 환경은 비 디버깅 환경과 약간 다를 수 있으므로 버그 (초기화되지 않은 포인터 일 수도 있음)가 다른 방식으로 나타 났으므로 다른 충돌이 발생할 수 있습니다. 그러나 질문에 대한 직접적인 대답은 "SIGSEGV 만 세그먼트 오류로 연결됩니다"입니다. –

답변

0

abort() 호출 프로세스에 SIGABRT 신호를 보내면 SIGABRT 또는 신호 6이 생성됩니다. 또한 대부분의 "assert"구현은 실패한 assert의 경우 SIGABRT를 사용합니다.

abort()는 일반적으로 내부 오류 또는 심각하게 깨진 제한 조건을 감지하는 라이브러리 함수에 의해 호출됩니다. 예를 들어 malloc()은 내부 구조가 힙 오버플로에 의해 손상된 경우 abort()를 호출합니다.

공식적으로 "세그먼트 오류"로 알려진 SIGSEGV 또는 Signal 11은 프로그램이 할당되지 않은 메모리 위치에 액세스 한 것을 의미합니다. 이것은 대개 프로그램의 버그입니다. 따라서 자신 만의 프로그램을 작성하는 것이 가장 그럴듯한 이유입니다. 그렇지 않으면 다른 신호가 프로그램에서 세분화 오류를 생성하는 것을 보지 못합니다.

관련 문제