onnelim7791   4년 전

비주얼 스튜디오에서 에라토스테네스의 체를 이용한 소수 판별 코드를 작성하고 있었는데요.
처음 코드를 실행할 때는 이상이 없었는데, 정답을 제출하면 런타임 에러가 발생하였습니다.
그래서 찾아본 결과 1000000까지의 숫자가 입력되므로 배열에 문제가 생길 가능성이 있다고 했고, 온라인 컴파일러로 실행할 때도 core dumped라는 에러 메세지가 출력되었습니다.
그래서 저는 직접 동적 할당했던 배열을 크기가 1000000인 int형 배열로 선언하고 실행해 보았습니다.
그러자 스택 오버플로우가 발생하며 실행되지 않았고, 이는 원래 했던 동적 할당을 통해 배열을 선언한 코드로 바꿧음에도 지속적으로 문제가 발생했습니다.
디버그 모드를 끄고 비주얼 스튜디오를 다시 시작하면 동적 할당한 코드는 다시 실행이 되긴합니다만, 동적 할당은 오버 플로우를 피할 수 있다고 본 것 같은데 아닌가요? 왜 이런 오류가 발생하고 해결 방법이 무엇인지 궁금합니다. 






pichulia   4년 전

배열의 크기를 N이 아니라 N+1로 잡아보시고..

(int)malloc 이 아니라 (int*)malloc 으로 해서 변수의 타입을 일치시켜주시기 바랍니다.

onnelim7791   4년 전

앗 말씀하신 대로 배열 부분을 수정했더니 맞았다고 뜹니다. 동적 메모리에 할당 시키면서 변수 타입에 대해 신경쓰지 못해서 이런 실수를 했네요 ㅠㅠ 좀 더 알아보고 제대로 써야겠습니다. 감사드려요.


indioindio   4년 전

여담이지만, 지역변수가 아니라 전역변수로 배열을 할당하면 스택에 생성되지 않아서 메모리제한 문제를 회피 할 수 있습니다.

게다가 소수인지 아닌지의 여부만 판단하면 되므로 char같은 1바이트 자료형 배열로 저장해도 될 것 같네요.

onnelim7791   4년 전

감사합니다 ㅠㅠ 오류가 왜 난건지 궁금해서 다른 자료형을 쓸 생각은 못했네요.

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