Segmentation Fault 핵심 정리
Segmentation Fault(Segfault, 세그폴트)는 프로그램이 접근할 수 없는 메모리 영역에 접근하려고 시도할 때 운영체제(OS)가 강제로 프로그램을 종료시키는 오류인데요. 곧 프로그램이 메모리 접근 규칙을 어겼을 때 OS가 내리는 강제적인 중단 명령입니다.
Segmentation Fault가 발생하는 주요 원인
- NULL 또는 초기화되지 않은 포인터를 역참조할 때
- 허용된 범위를 벗어난 배열이나 메모리 영역 접근
- 이미 해제된(free된) 메모리 접근 (dangling pointer)
- 읽기 전용 영역(예: 문자열 리터럴) 변경 시도
// 예시 1: NULL 포인터 접근
int *ptr = NULL;
*ptr = 10; // Segmentation Fault 발생
// 예시 2: 배열 인덱스 초과 접근
int arr[3] = {1, 2, 3};
int x = arr[10]; // Segmentation Fault 발생 가능성 높음
어떻게 탐지할까?
Segmentation Fault를 탐지하고 분석하기 위한 대표적인 방법은 다음과 같습니다.
- 디버거(debugger) 사용 (예: GDB, LLDB)
- 코드 리뷰 및 정적 분석 도구 사용 (Valgrind 등 메모리 분석 도구)
- 예외 처리 및 assert 문을 활용한 사전 방어적 코딩
# GDB로 세그폴트 탐지하기
$ gcc -g program.c -o program
$ gdb ./program
(gdb) run
# 세그폴트가 발생하면 어느 지점에서 오류가 생겼는지 확인 가능
마치면서
Segmentation Fault는 C/C++와 같이 메모리를 직접 관리하는 언어에서 자주 만나는 오류 중 하나인데요. 메모리를 조작할 때는 항상 안전한 접근을 염두에 두고, 디버거 및 분석 도구를 적극 활용해 문제를 방지하고 신속하게 해결해야 합니다.
'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글
[중간정리] 10-11주차: 커널모드/사용자모드, 컨텍스트 스위칭, fsync, MLFQS (0) | 2025.05.28 |
---|---|
[CS기초] 10-11주차 개념정리 (0) | 2025.05.27 |
[CS기초] Interrupt란 무엇인가? (0) | 2025.05.18 |
[CS기초] rax Register 핵심 개념 정리 (0) | 2025.05.18 |
[CS기초] Atomic Operation (원자적 연산) 개념 정리 (0) | 2025.05.18 |