세그멘테이션 결함(Segmentation Fault)


세그멘테이션 결함 은 소프트웨어의 실행 중에 나타날 수 있는 오류 이며 세그폴트(SegFault)로 줄여서 쓰기도 한다.



이 오류에 핵심은 프로그램이 


(1) 허용되지 않은 메모리 영역에 접근을 시도하거나


(2) 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생한다.


세그멘테이션은 OS에서 사용하는 메모리 관리 및 보호의 한 기법이다.


이것은 페이징으로 대부분 대체 되었지만 세그폴트의 용어는 여전히 사용된다. 


주로 사용 되는 메모리 관리 정책은 페이징 이지만 몇몇 OS에서는 여전히 일부 논리 레벨에서 세그멘테이션을 사용한다.


UNIX 계열 운영 체제들에서는 잘못된 메모리에 접근하는 프로세스는 SIGSEGV 신호를 받는다.


(signal 에 대해서는 각 운영체제 별로 따로 조사)


MS 윈도우에서는 STATUS_ACCESS_VIOLATION 예외 처리를 받는다.



ex) : 세그폴트의 예제 코드 (ANI C)

const char *s = "hello world";

*s  = 'H';



// 이 경우의 const char *s 는 읽기 전용으로 프로그램이 되지만  프로그램이 로드 되었을때 이 OS는 문자열과 상수 데이터를 메모리의 읽기 전용 세그먼트에 배치하며 프로그램 실행시 변수 s는 문자열의 위치를 가리키게 되고 'H'라는 문자열을 변수 s를 통해 메모리에 기록하려는 시도는 곧 세그멘테이션 결함을 일으킨다.








+ Recent posts