usj0119   4년 전

이 코드에서 M <= 50,000인데, 제가 실수로 배열을 10001 크기로 선언을 했습니다.

그렇다면 M>10000인 입력에서 '선언되지 않은 곳'에 접근했으니 런타임 에러가 나야할 것 같은데, '틀렸습니다'가 떴습니다.

왜 이런 현상이 발생하는 건가요? 

djm03178   4년 전

배열의 범위를 살짝 벗어난다고 해서 무조건 런타임 에러가 나는 것이 아닙니다. 실제 메모리 할당은 페이지 단위로 이루어지며, 이 범위 내에서의 접근은 당장의 런타임 에러를 일으키지 않을 뿐더러, 선언한 변수들이 대체로 연속적인 공간이 할당되기 때문에 범위를 벗어난 곳에는 다른 변수가 있을 가능성이 높기 때문입니다.

틀렸습니다가 떴다면 범위를 넘어선 접근이 이 다른 변수의 값을 건드리면서 프로그램의 실행 흐름이 더 멀리까지 가지 않고 금방 종료될 수 있도록 바뀌었을 가능성이 큽니다.

usj0119   4년 전

무조건 선언된만큼만 할당되는 것이 아니군요... 좀더 열심히 공부해야겠습니다.

답변 감사합니다.

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