kth   6년 전

출력 부분에서 저는 이런식으로 코딩 했는데 50센트에서 런타임 에러 뜨더라구요. 무언가 잘못 된건가요?

kth   6년 전

참고로 밑에 소스 처럼 출력 부분만 변경했는데 잘 되더군요. 왜 위에 처럼 한 원소 씩 i값을 이동해 가면서 출력하면 런타임 에러가 뜨는거죠? 범위도 맞는것 같은데...

ntopia   6년 전

실제로 돌려본건 아니고 추측입니다.

deq가 비어있으면 deq.size() 하면 0이 나오겠죠?

근데 size() 함스는 unsigned를 리턴합니다.

unsigned - signed 하면  signed 가 unsigned로 캐스팅되어 연산을 수행합니다.

따라서 deq.size() - 1의 결과는 2^32-1 이 됩니다.

이 때문에 이상한 메모리에 접근하려고 하여 런타임에러가 나는 것 아닐까요?

두번째 코드에서는 deq 가 비어있는 경우 deq.size() - 1을 절대로 실행하지 않기 때문에 괜찮아보입니다.

kth   6년 전

덱.size()를 printf %d로 출력하면 잘 나와서 그냥 써도 될 줄 알았네요.ㅎㅎ

for문에서 님 말대로 덱이 비어있을 때 덱.size() - 1 이 연산이 오류가 나서 int로 캐스팅 해서 해결 되었습니다.

참고로 for문 조건을 전부 unsigned int로 캐스팅 했을 때는 안되는데 이 이유는 모르겠네요..

아무튼 감사합니다.

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