본문 바로가기

C++

Segmentation fault 사례4

[1. 개요]

보통 배열에 대한 for 문은 0 ~ n 까지 증가하는 방식으로 작성하는 경우가 많은데,

반대로, n ~ 0 까지 감소하는 경우로도 (역 방향) 작성 할 수 있다.

 

이때, 실수 할 만한 부분은 아래와 같은 반복문이다.

for (unsigned int idx=n-1; idx >= 0; idx--) {
    // something.
    // access arr[idx]
}

 

문제는 변수 idx 의 자료형이 unsigned 라는 것이다.

idx == 0 인 경우 배열 접근이 가능하나, 여기서 -1 을 하는 순간 -1 을 unsigned 로 해석하여 매우 큰 수가 되어 버린다.

  • 0xffffffff

그래서, idx 가 0 보다 작아지는 경우는 절대 발생 할 수 없고, 매우 큰 번지 수를 참조하려는 비정상 상황이 발생하는 것이다.


[2. 해결]

부호 있는 자료형을 사용하도록 한다.]

  • 특히, 뺄셈 연산을 하는 모든 부분에 대해서...

 

'C++' 카테고리의 다른 글

OS 별 select() 함수 사용법  (0) 2025.04.24
구조체 대입 연산  (0) 2025.04.15
Segmentation fault 사례3  (0) 2025.04.14
Segmentation fault 사례2  (0) 2025.04.01
STL priority_queue  (0) 2021.10.28