jun2077681   5년 전

대체 어디서 런타임 에러가 터지는 요소가 있는지 전혀 모르겠네요...

배열 크기는 충분하다 못해 넘쳐나는데 ㅠㅠ

시간초과나 틀렸습니다 뜨면 고치기라도 하지 이건 어떻게 해야 하나요.. ㅠㅠ

주석처리하면서 하나하나 보니까 while문 쪽에서 터지는 것 같던데;

djm03178   5년 전

15번째 줄처럼 하면 i가 배열 범위를 벗어난 뒤에도 Prime[i]에 접근하게 됩니다.

jun2077681   5년 전

위쪽 Prime 코드는 예전에 다른 문제에 제출해서 맞았던 코드인데... 어디가 문제인거죠?ㅠ

djm03178   5년 전

그건 운이 좋았던 거고, 언제든지 문제가 될 수 있는 코드입니다.

i = 10000001이 되었다고 가정해봅시다. for문에서 조건 검사를 하기 위해 Prime[i]에 먼저 접근합니다. 이 접근은 올바른 접근인가요?

설령 여기서 에러가 나지 않았다고 하더라도, 배열의 범위를 벗어난 Prime[i]에 들어있는 값이 우연히도 0일 수도 있습니다. 그러면 루프를 또 돌 테고, 이번에는 i = 10000002가 되고, 또 배열 범위를 벗어난 검사를 하고, 이러다 보면 언젠가는 프로그램에게 할당된 메모리 범위를 확실히 벗어나는 순간도 올 수 있습니다.

jun2077681   5년 전

와 이거 고치니까 바로 해결되었네요... 감사합니다

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