segmentation fault는 뭔가요?


제가 궁금한 건 3가지입니다.

  • segmentation fault는 뭔가요?
  • C/C++에서 똑같이 쓰나요?
  • segmentation fault랑 포인터는 어떤 연관이 있나요?
  • 2016년 01월 15일에 작성됨

조회수 267


1 답변


좋아요
0
싫어요
채택취소하기

"segmentation fault는 뭔가요?" :

segmentation fault는 허용되지 않은 방법으로 메모리에 접근할 때, 허용되지 않은 메모리 영역에 접근할 때 발생해서 사용자가 메모리를 오염시키는 걸 막아주고, 디버깅하기 힘든 메모리 버그를 알려주는 역할을 합니다.

허용되지 않은 방법으로는

  • 이미 메모리 해제 된 변수에 접근할 때
  • read-only로 설정된 메모리 영역에 쓰려고 할 때 등이 있습니다.

"C/C++에서 똑같이 쓰나요?" :

C와 C++의 sigfault는 특별한 차이는 없습니다. 사실 대부분의 언어에서 segmentation fault는 차이가 없습니다.

"segmentation fault랑 포인터는 어떤 연관이 있나요?" :

C++같은 저급 프로그래밍 언어에서는 segfault가 발생하는 상황은 엄청 많습니다. 그리고 보통 포인터랑 관련이 있지요.

null값을 가리키는 포인터에 접근하는 경우

int main(){
    int* myptr = NULL;
    *myptr = 3;
}

read-only로 표시된 메모리 영역에 쓰려고 할 때

int main(){
    char* myptr = "hello! world!";
    *myptr = 'h';
}

더 이상 존재하지 않는 메모리 영역을 가리킬 때

int main(){
    char* myptr = NULL;
    {
        char c = '3';
        myptr = &c;
    }
    //block이 끝나서 c의 수명은 끝났는데 myptr은 여전히 c를 가리키고 있음
    *myptr = 'G'; //여기서 segfault!
}

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close