segmentation fault는 뭔가요?
조회수 37474회
1 답변
-
"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! }
댓글 입력