sukjb33   2년 전

5 번째 줄에 정수형 자료형이 백만개가 있어서 문제인거 같은데 실행을 하면 Process exited after 2.255 seconds with return value 3221225725 이렇게 뜨고 아무것도 안떠요.. 그리고 이대로 채점을 해보니 런타임 에러(OutOfBounds)이렇게 뜨구요. 

5번째 줄 코드를 int integer[10000]으로 바꾸고 하면 실행이 잘 되거든요

그래서

int N, min, max, i, j;
scanf("%d", &N);
int integer[N]={0, }; 
이렇게 선언을 하니까 안되더라구요

int N, min, max, i, j;
scanf("%d", &N);
int integer[N];
이렇게 선언하면 되구요.

입력받은 N만큼 정수형 배열을 만드는데 ={0, }을 했을땐 안되고 그냥 integer[N]; 으로 선언하면 왜 되는건가요???

djm03178   2년 전

우선, 질문에 올려주신 코드 그대로 내면 맞습니다. 런타임 에러(OutOfBounds)가 나는 건 배열의 크기를 10000으로 설정하셨을 때일 것입니다. 입력으로 주어지는 수는 최대 100만 개인데, 배열의 크기가 10000이면 그보다 수가 많이 입력될 경우 배열의 범위(bound)를 벗어났기(out of) 때문에 해당 에러를 받는 것입니다.

그런데 로컬에서 100만으로 하고 실행하면 에러가 나는 이유는 https://dojang.io/mod/page/vie... 때문입니다. 이는 빌드 설정에서 해결하실 수 있습니다. 채점 서버에는 스택 크기의 제한이 없습니다.

int integer[N]; 과 같은 것은 가변 크기 배열이라고 부르는 것으로 이러한 배열들을 초기화를 할 수 없습니다. https://stackoverflow.com/ques... 의 두 번째 답변을 보시면 됩니다.

sukjb33   2년 전

djm03178님 친절한 답변 감사합니다!

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