Undefined behavior란 ?
의도가 명확하지 않은 코드를 Undefined behavior라고 함
UB를 가진 코드를 컴파일 할 경우 의도와 전혀 다른 바이너리 파일을 생성할 수 있음
•
변수를 초기화 하지 않고 사용
•
잘못된 메모리 접근
•
자료형의 범위를 넘어가는 값을 넣음
•
잘못된 시퀀스 포인트
•
등등
→ 동작을 예측할 수 없는 코드
Undefined behavior의 결과
•
에러, 경고 메시지
•
오버플로우, 언더플로우
•
버스 에러
•
세그먼트 에러
•
등등
예제 - 초기화 되지 않은 변수
•
init_value
int init_value(bool is_fourtytwo)
{
int value;
if (is_fourtytwo == true)
value = 42;
return value;
}
C
복사
•
main function
int main()
{
printf("init : %d\\n", init_value(true));
printf("uninit : %d\\n", init_value(false));
}
C
복사
•
결과
init : 42
uninit : 49299200
is_fourtytwo가 true라면
value는 42로 초기화가 되어 정상적으로 42를 리턴하고,
is_fourtytwo가 false라면
value는 초기화되지 않은 상태로 쓰레기 값을 리턴
Plain Text
복사
•
결과적으로 예측 불가능한 결과를 초래
문제점
1.
예측할 수 없음
2.
단순 버그로 그칠 수도 있으나 경우에 따라 모든 프로그램에 영향을 줄 수 있음
3.
아직은 문제가 생기지 않을 수 있음