dlwocjf2882   2년 전

아래 소스코드는 1 2 3 4 5 6으로 이루어진 배열을 6 5 4 3 2 1 과 같이 역순으로 바꾸어 출력하기 위한 코드입니다.
이때

temp = *(back - (5 - n));

arr[n] = *(front + (5 - n));

위 부분에서 산술 오버플로 경고문이 발생합니다.
경고문 내용은 다음과 같습니다.

"4 바이트 값에 '-'연산자를 사용한 다음 결과를 8 바이트 값으로 캐스팅합니다. 오버플로 (io.2)를 피하기 위해 연산자 '-'를 호출하기 전에 값을 더 넓은 유형으로 캐스팅합니다."

back은 포인터 변수로서 주소값이 저장되어있고 8byte입니다. n은 4byte입니다. 8byte값에서 4byte값을 빼는것이 왜 문제가 되는지 잘 모르겠습니다.똑같은 4byte값인 상수를 단독으로 뺴는건 전혀 문제가 되지 않는데 말입니다. [ex. temp = *(back - 5 ); 은 문제가 되지 않음.]
변수 n의 자료형을 long long 으로 바꾸면 경고문이 발생하지 않는데 도저히 이유를 명확히 모르겠습니다.
이러한 경고문이 왜 발생하는 건지 이유를 알려주시면 감사하겠습니다.

palilo   2년 전

대충 이해가 가시나요? 결과가 달라질 수 있어요

댓글을 작성하려면 로그인해야 합니다.