segmentation fault는 뭔가요?

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

  • segmentation fault는 뭔가요?
  • C/C++에서 똑같이 쓰나요?
  • segmentation fault랑 포인터는 어떤 연관이 있나요?

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!
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.