C언어 세그폴트 원인 찾기

세그멘테이션 폴트(Segmentation Fault)는 프로그램이 허용되지 않은 메모리 영역에 접근할 때 발생한다.

주로 잘못된 포인터 사용이 원인이다.

흔한 세그폴트 발생 원인

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 1. NULL 포인터 역참조
    int *ptr = NULL;
    // *ptr = 10; // 실행 시 세그폴트 발생!

    // 2. 초기화되지 않은 포인터 사용
    int *uninit;
    // *uninit = 20; // 위험!

    // 3. 배열 범위를 벗어난 접근
    int arr[5];
    // arr[10] = 50; // 운 좋으면 넘어가지만, 보통 세그폴트

    // 4. 할당되지 않은 메모리에 쓰기
    char *str = "Read Only";
    // str[0] = 'W'; // 문자열 리터럴은 수정 불가 영역에 있어 세그폴트 발생

    return 0;
}

코드 설명:
– 포인터를 사용하기 전에는 반드시 NULL 체크를 하거나 유효한 주소로 초기화해야 한다.
– 문자열 리터럴("...")은 메모리의 읽기 전용 구역에 저장되므로 포인터로 내용을 수정하려고 하면 세그폴트가 발생한다.

오늘 공부 기록의 중심은 C언어 세그폴트 원인 찾기였다.

포인터를 한 줄씩 따라가면서 하나씩 확인하다 보니 어느 순간부터 ‘왜’를 빼고 외우기만 해서 스스로 설명이 안 됐다.

작은 예제를 여러 번 재작성하면서 표현을 바꿨더니 개념이 더 단단해졌다.

같은 내용을 다른 변수 이름으로 다시 구현했더니 C언어 세그폴트 원인 찾기이 훨씬 또렷해졌다.

C언어 세그폴트 원인 찾기을 한 번에 끝내진 못했지만, 적어도 흔들리는 지점은 분명해졌다.

예전보다 덜 겁난다는 감각이 생긴 게 가장 큰 수확이었는 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts