lmg3111977   3년 전

코드자체는배열에 1백만넣었을때 통과입니다. 공지랑 다르게 이거는 코드문제가아니라 숫자자리가 백만이냐 십만이냐에따라서 왜 이런 오류코드가 뜨는지 모르겠습니당..

하지만 비주얼스튜디오에서는 1백만이넘자 int main(void)부분에서 main에 밑줄이 쳐지고 오류가뜹니다.

오류는 c6262함수에서 4000016바이트의 스택사용하는데 이 크기가 /analyze:stacksize '16384'를 초과합니다. 일부 데이터를 힙으로 이동하시오. 라고뜹니다.

그리고 main에도 밑줄처지지만 밑에 MIN = MAX = array[0];부분에 array부분에도 밑줄처집니다 ㅜㅜ

힙으로 이동하라는데 먼말인지모르겠습니다 ㅜㅜ 1백만일떈안되고 1십만일떄는 작동됩니다... 백만넘어가면 cmd창 켜졌다가 무반응후 꺼지네요..

shg9411   3년 전

쉽게 말해서 main 메소드 내의 공간은 스택, 바깥을 힙이라고 보시면 됩니다.

IDE에서 스택 메모리 크기를 조절하실 수도 있고, 크기가 큰 경우 전역으로 main 바깥에서 선언해주시면(heap 공간에) 오류 메세지는 안 뜰거에요.

검색해서 조금 더 깊게 알아두시는게 좋을 것 같습니다.

그리고 이런 문제에서는 배열을 선언해서 저장하지 않고, 수를 하나씩 입력 받으면서 그 수랑 최대, 최소랑만 비교하면 100만 칸의 메모리 공간을 아낄 수 있겠죠?

lmg3111977   3년 전

네 감사합니다. 아직 잘 몰라서 모르는 용어가많네요. 자고 일어나서 찾아보겠습니다.

근데 한가지 더 질문이있다면, int형이라서 백만넘을때 오류뜨는게 아니죠? long도 해보고 다 넣었는데 딱 백만지점에서 항상 오류가 걸려서요.

shg9411   3년 전

정확한 사이즈는 설정이 달라서 말씀드릴 수 없습니다.

int나 long이나 4byte입니다. (32bit OS기준)

100만 칸이면 4byte*1000000 = 4MB겠죠?

스택 메모리 공간이 4MB로 미만으로 설정되어 있으면, 저런 오류 메세지가 뜨는 것 입니다.

만약 스택 메모리 공간이 4MB로 설정되어 있다면, char형 배열인 경우에는 400만 칸을 선언하면 에러가 뜨겠죠.

lmg3111977   3년 전

감사합니다

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