eunthoya   3년 전

안녕하세요 코딩을 시작한지 얼마 안된 사람입니다.

1. 8번째 줄에서

"함수에서 '4000020'바이트의 스택을 사용하는데 이 크기가 /analyze.stacksize '16384'를 초과합니다. 일부 데이터를 힙으로 이동하십시오" 라는 경고가 뜹니다. a[100]정도로 배열 크기를 크게 낮추면 이 경고문구는 뜨지 않는데, 왜 이렇게 배열 크기를 키우면 경고문구가 발생하는지 궁금합니다.

2. 16번째 줄에서 "초기화되지 않은 메모리 'a'를 사용하고 있습니다"라는 경고문구가 뜹니다. 입력을 통해 받은 값을 어떻게 초기화 해야할지 모르겠습니다..

답은 맞았지만 채점시간이 굉장히 오래걸렸고,,, 거의 20~30초걸린것 같습니다. 또 계속 런타임 오류가 뜨는걸 보면 맞았다고 뜬것이 우연이거나 운이좋아서 그랬단 생각이 듭니다. 읽어주셔서 감사드리고 꼭 답변 부탁드려요!

dldyddlwl   3년 전

1. main도 하나의 함수입니다. 함수는 stack 영역(지역변수 이 경우 a,매개변수)의 메모리를 사용하는데, 정해진 크기보다 더 많이 쓰려고 해서 경고 문구가 뜬 겁니다.

이 경우에는 stack 크기를 더 늘리거나 경고문구에 있는 heap이라는 영역을 사용합니다. 또는 전역변수로 선언해서 데이터 영역을 쓸 수도 있습니다. 

여기서, 배열크기를 낮추면 괜찮은 이유는, stack 크기보다 작기 때문에 그렇습니다. 따라서 적절히 써주는게 좋습니다! 

하나를 너무 많이 쓰다보면 오버플로우가 발생해서, 중요한 메모리 공간에 영향을 줄 수 있습니다.

2. 혹시 실수를 할까봐 뜨는 경고문입니다. 여기서는 scanf를 통해 값을 받았으므로 괜찮습니다. 다만, 그 경우가 아니라면, 초기화 해줘야겠죠!

ex) int sum;  sum+= 10; 을 할 경우 sum값을 신뢰할 수 없습니다.


3. 채점해보니 20초씩 걸리지는 않고 180ms 나왔습니다!

eunthoya   3년 전

답변 감사합니다 해결됐어요!!

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