goodjaeheui   4년 전

배열은 메모리를 최적화시키기 위해 동적으로 할당하였고 그 크기는 

주어진 값 m과n사이의(m,n포함) 수 중에서 소수를 출력하는 것이므로 int max=n;으로 하였고

동적 메모리로 

int*maxarr;

maxarr = (int*)malloc(sizeof(int)*(max+1));  다음과 같이 할당하였습니다.

왜냐하면 예를들어 만약 n=max=7 이라면

maxarr[7]=1 (maxarr[max]까지 초기화를 시켜야 하기 때문에 동적베열의 크기를 max+1로 할당하였습니다.)

이렇게 초기화를 모두 시키고 배열도 이상없이 넣었는데 어디서 런타임에러를 작동시켰는지 잘 모르겠습니다.

전체 소스코드 첨부하였습니다.

exponential_e   4년 전

우선 아래 입력에서 런타임 에러가 발생합니다.

범위가 어떻든 1000000 자체가 입력으로 주어지면 문제가 발생하는 듯 합니다.

(1 1000000도 마찬가지로 런타임 에러 발생합니다.)

제가 c++쪽은 잘몰라 찾아봤는데요.

코드상 문제는 없는 것 같은데 19번째 줄에 i * i하시면 그 결과가 int 범위가 넘어가서 그런 것 같아요.

저같은 경우엔 (i + i) 로하는데.. 사실 에라토스테네스의 체 자체를 완벽하게 이해하진 못해서 자세한 증명까진 못해드릴것 같아요. 죄송합니다.

(실제로 대략 입력으로 n = 5만 일때 부터 런타임 에러가 나는데, (5만)^2 = 2,500,000,000 25억이니까 int 범위를 넘어갑니다.)

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