세그멘테이션(Segmentation) 오류란?
- 운영체제(OS)
- 2023. 4. 11.
세그멘테이션(Segmentation) 오류의 원인을 일반화해서 해결책을 제시하기는 어렵지만 개념을 이해하면 적절히 상황에 맞게 원인을 유추할 수는 있습니다.
세그멘테이션(Segmentation) 오류
운영 체제(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; // 널 포인터 참조로 인한 세그멘테이션 위반 발생
반응형
'운영체제(OS)' 카테고리의 다른 글
리눅스 CPU 정보 확인 방법 (cat /proc/cpuinfo) (0) | 2023.04.18 |
---|---|
리눅스 종료 명령어 사용법 (shutdown, poweroff, reboot) (0) | 2023.04.16 |
프로세스 로그 수집 방법 (프로세스 모니터) (0) | 2023.04.07 |
윈도우10 원격 데스크톱 연결 방법 (0) | 2023.04.04 |
윈도우 서비스 시작 유형 "자동(지연된 시작)" 설정 이유 (0) | 2023.03.31 |