예전 프로젝트에서 큰 낭패를 보았는데,
흔히 우리가 for문을 아래와 같이 사용하게 되는데
max의 값이 음수가 될때에는 문제가 발생하게 됩니다.
위의 코드에서 print 함수가 호출되지 않을것 같지만 size_t가 가질수 있는 최대값만큼 호출됩니다.
컴파일러에서 size_t 타입과 비교를 위해 -1을 size_t타입으로 변환을 시켜버립니다.
그래서 우리가 원치 않는 결과가 발생하게 됩니다.
또한 아래의 코드도 위험합니다. 무한 루프를 돌게 됩니다.
흔히 우리가 for문을 아래와 같이 사용하게 되는데
for(int i = 0;i < max;++i)
예전 프로젝트의 일부분의 코드가 아래와 같이 되어있었습니다.for(size_t i = 0;i < max;++i)
max의 값은 계산되어지는데 일반적으로 위의 코드는 아무런 문제가 없이 수행되었는데max의 값이 음수가 될때에는 문제가 발생하게 됩니다.
for(size_t i = 0;i < -1;++i)
{
printf("ddd");
}
위의 코드에서 print 함수가 호출되지 않을것 같지만 size_t가 가질수 있는 최대값만큼 호출됩니다.
컴파일러에서 size_t 타입과 비교를 위해 -1을 size_t타입으로 변환을 시켜버립니다.
그래서 우리가 원치 않는 결과가 발생하게 됩니다.
또한 아래의 코드도 위험합니다. 무한 루프를 돌게 됩니다.
for(size_t i = 100;i >= 0;--i)
{
printf("ddd");
}
댓글
댓글 쓰기