운영 체제(OS)에서 세그멘테이션 오류는 프로그램이 올바르지 않은 메모리 영역에 접근하려고 할 때 발생하는 예외다. 예외 발생 시 운영 체제는 프로세스를 종료시키고 종종 코어 덤프를 생성한다.
C/C++에서는 메모리 관리를 개발자가 수동으로 해야 하는 특성을 가지고 있기 때문에 주로 C/C++ 코드에서 자주 발생한다 .
발생하는 상황들
1. 함수 포인터를 초기화하지 않고 호출
void (*func_ptr)(); // 초기화되지 않은 함수 포인터
func_ptr(); // 초기화되지 않은 함수 포인터 호출로 인한 세그멘테이션 위반 발생
2. 배열 범위를 넘어서는 인덱스 사용
int arr[10];
arr[100] = 42; // 범위를 벗어난 인덱스 사용
3. 동적 메모리 할당 후 해제한 메모리에 접근
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
*ptr = 42; // 이미 해제된 메모리에 접근
4. 스택 오버플로우. 재귀 함수를 사용할 때 깊이 제한을 설정하지 않거나, 함수 호출 시에 스택 메모리를 과도하게 사용
void recursive_function() {
int large_array[100000];
recursive_function(); // 스택 오버플로우로 인한 세그멘테이션 위반 발생
}
5. 널 포인터 참조. 초기화되지 않은 포인터를 사용하거나, 널(NULL)로 설정된 포인터를 참조
int *ptr = NULL;
*ptr = 42; // 널 포인터 참조로 인한 세그멘테이션 위반 발생
'CS > OS & 하드웨어' 카테고리의 다른 글
프로그램 (Program) 이란? (0) | 2024.01.03 |
---|---|
세션의 생성과 관리 (0) | 2023.12.12 |
세그멘테이션(Segmentation)이란? 세그멘테이션 vs 페이징 (0) | 2023.10.23 |
아스키코드(ASCII Code) - 컴퓨터의 문자 처리 원리 (0) | 2023.10.08 |
프로그래밍 언어와 빌드 과정 [Build Process] (0) | 2023.09.23 |