수정 전의 7번 줄에 의해서는 numbers 벡터는 그 원소가 10과 0의 두개 뿐인, 즉 그 크기가 2인 벡터입니다.
이 벡터에 대해서 범위 밖의 메모리에 대입/참조를 하고 있고, 이는 UB입니다.
2562번 - 최댓값
말씀하신 UB는 "Undefined Behavior"를 지칭하시는 것으로 이해했습니다.
하지만 제가 이론적 배경을 잘 몰라서 UB랑 메모리 초과 연결을 못 짓겠습니다.
저는 위 코드가 메모리 제한 128MB를 초과하는 이론적 배경이 궁금합니다.
범위 밖의 메모리에 대한 대입/참조는 메모리 사용을 늘리나요?
범위밖에 대한 메모리에 대한 접근이 직접적으로 메모리 사용량을 늘린다는 것은 아니구요.
상황이 UB이니만큼 정확한 해석은 어렵겠지만, 다음과 같은 경우가 아닐까 감히 추측해봅니다.
vector에서 원소들이 실제로 포함되는 부분이 아닌, 그것에 대한 정보를 가지고 있는 메모리가 따로 있어서 두 부분이 만약 인접해 있다면,
범위를 초과하여 입력할 때 그 부분의 값이 잘못 덮어씌워지게 될 것입니다.
그런데 잘못 덮어 씌운 값이 만약 원소들이 실제로 포함되는 부분의 실제 주소와 관련이 있다면
다음 접근부터는 입력값에 의해 잘못 덮어씌워진 주소에 임의 접근을 할 것이구요.
그 주소가 원래 주소와 차이가 많이 나면, 그 사이의 메모리를 모두 사용한 것으로 생각하여 메모리 초과가 난 것은 아닐까 생각되네요.
댓글을 작성하려면 로그인해야 합니다.
htc_refactor 4년 전
아래는 제가 2562번 문제 풀면서 작성한 코드인데 제출했을 때 메모리 초과로 인한 오답 으로 채점되었습니다.
7행을 잘못 작성한게 가장 큰 이유였습니다. (
vector <int> numbers(10, 0);
으로 썼어야 했습니다)궁금한 점은 아래 코드를 제출하면 "메모리 초과"가 나오는데, 2562번 문제의 메모리 제한은 128MB 입니다.
아래 코드가 128MB의 메모리 제한을 초과할 경우가 있나요?
읽어주셔서 감사합니다.