vegatrash   5년 전

문제를 풀다가 아래와 같은 코드가 들어있는 코드를 이용해 문제를 풀었더니 통과가 되었는데

당시엔 모르다가 지금 보니 분명히 -1번 인덱스를 접근하고 있는데도 아무 오류없이 잘 종료되더라고요...

문제번호를 굳이 적은 이유는 혹시 무슨 문제인지 궁금해 하실까봐 적었습니다.

저 문제에서 제가 제출한 코드 보셔도 되고 아래에 중요한것만 간추린 코드 보셔도 됩니다

djm03178   5년 전

C++은 인덱스가 배열의 범위를 넘어가는지 검사하지 않으며, 넘어간다고 하더라도 반드시 즉각 오류가 난다는 보장이 없습니다.

프로그램에게 메모리는 딱 요청한 바이트 수만큼이 아니라 페이지 단위로 할당되기 때문에 범위를 조금 벗어났다고 해서 바로 할당받지 않은 주소를 접근하는 것이 아닐수도 있으며, 변수들 역시 주로 연속된 공간에 할당되므로 인덱스를 살짝 벗어난 위치는 다른 변수의 주소일 가능성도 높습니다.

vegatrash   5년 전

밑에 주석처리한 v[-1]을 출력해보면 오류를 내는데 즉각 오류를 반환 안하는 경우는 반복문 안에 있을 때만 그런가요?

vegatrash   5년 전

어 실행할때마다 오류일수도 있고 아닐수도 있고 랜덤으로 뜨네요?? ㄷㄷ

vegatrash   5년 전

그럼 저 문제에 제가 제출한 코드의 경우에는 -1번 인덱스를 접근하지만 운이 좋아서 백준 컴파일러에서 정상종료되어서 통과된거라고 볼 수 있나요?

만약 다시 제출하면 틀릴 수도 있다는거네요

lovinix   5년 전

근데 s.size()가 0이 될 때가 있나요?

vegatrash   5년 전

100 -100을 입력해서 수행하면 빅인티져  add함수 마지막에서 0인값들은 다 erase되므로 빈 string 이 반환됩니다 그래서 s.size()가 0인경우를 넣었어요

djm03178   5년 전

배열의 범위를 넘어가는 건 undefined behavior이므로, 어떤 동작을 일으켜도 이상하지 않고, 실행 시마다 결과가 달라져도 전혀 이상하지 않습니다.

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