2007/07/17

A Book On C Chapter 6 연습문제 2번.

컴파일러 중 어떤 것은 연습문제 1번의 수식 p - (p - 2)에 대하여 정수 오버플로에 관한 경고를 낸다. 연습문제 1번에서 작성한 프로그램을 수정하여 p와 p - 2 값을 출력하도록 하여라. 정수 오버플로가 발생하겠는가?(더 자세한 내용은 다음 연습문제를 참조하여라.)

#include
int main(void)
{
char *format = "%p %d %d %d %d %d\n";
int i = 3;
int *p = &i;
printf(format, p, *p + 7, 3 * **&p + 1, 5 * (p - (p - 2)), p, p - 2);

return 0;
}

출력은
0x22cce0 10 10 10 2280672 2280664

포인터 연산 시 '+'를 사용한다면 오버플로가 생길 가능성이 있어보인다.
'-'를 사용한다면 언더플로가 생길 가능성이 있을 것이고.

댓글 없음:

댓글 쓰기