728x90
Unit testing 진행 중 예상 했던 값보다 1큰 값이 얻어지는 기이한 현상이 발생했다.
원인을 분석해보니 for loop 조건문 내에 후위 연산자가 문제였다.
사건의 시작
cnt 값이 0이 될 때까지 for~loop를 도는 코드가 있다.
근데 동작이 묘하게 이상했다.
...
for (p = s; (cnt-- != 0) && *p != '\0'; ++p) {
process(*p);
}
...
무엇이 문제일까? 맞춰보자
원인은 무엇?
원인은 for~loop 조건문 내 후위 연산자!
for~loop 이후 cnt 값을 사용하는 로직이 있다면
개발자는 cnt가 0인줄 알고 사용하지만 실제로는 -1이거나 overflow된 값이 됨
이 값을 사용하게 되면 undefined behavior!
평소 생각지 못한 오류여서 놀라웠다
728x90
'TIL > 2025' 카테고리의 다른 글
| [cpp] Request and Suppress (=default, =delete) (1) | 2025.09.08 |
|---|---|
| [cpp] Lambda Functions (0) | 2025.08.25 |
| Guard Clause를 통해 바라본 Clean Code와 MISRA Rule의 차이 (3) | 2025.08.15 |
| Data Structure & Algorithm (0) | 2025.07.25 |
| Learn the architecture - Generic Interrupt Controller v3 and v4, Overview (0) | 2025.06.12 |