배열의 범위를 살짝 벗어난다고 해서 무조건 런타임 에러가 나는 것이 아닙니다. 실제 메모리 할당은 페이지 단위로 이루어지며, 이 범위 내에서의 접근은 당장의 런타임 에러를 일으키지 않을 뿐더러, 선언한 변수들이 대체로 연속적인 공간이 할당되기 때문에 범위를 벗어난 곳에는 다른 변수가 있을 가능성이 높기 때문입니다.
틀렸습니다가 떴다면 범위를 넘어선 접근이 이 다른 변수의 값을 건드리면서 프로그램의 실행 흐름이 더 멀리까지 가지 않고 금방 종료될 수 있도록 바뀌었을 가능성이 큽니다.
usj0119 4년 전
이 코드에서 M <= 50,000인데, 제가 실수로 배열을 10001 크기로 선언을 했습니다.
그렇다면 M>10000인 입력에서 '선언되지 않은 곳'에 접근했으니 런타임 에러가 나야할 것 같은데, '틀렸습니다'가 떴습니다.
왜 이런 현상이 발생하는 건가요?