38.자리 찾기문제에서 배열의 크기에 질문이 있습니다.
621
작성한 질문수 1
int arr[] 배열 선언할때 main 함수 바깥 맨위에서 선언을 하면
int arr[2]; 처럼 아무리 작은 크기로 배열을 선언해도
7
11 15 19 23 27 32 36
21
콘솔에서 이런식으로 배열크기를 초과하는 입력을하면
11 15 19 21 23 27 32 36 출력되서 정상작동되는데 그 이유가 궁금합니다. main 함수안에서 int arr[] 배열을 선언하면 그렇게 나오지가 않습니다.
그리고 arr 배열을 main함수 안에서 int arr[4];라고 선언하고 입력예제
5
1 3 7 9 15
8
를 입력하면 출력이 정상적으로 되는데 애초에 선언된 크기인 arr[4]를 넘어가는 입력이 들어왔는데 어떻게 '1 3 7 8 9 15 ' 6개의 숫자가 정상출력되는데 이유가 궁금합니다. 그리고
int arr[7];라고 선언하고 입력예제
7
11 15 19 23 27 32 36
21
하면 이건 또 출력이 정상적으로 되지않습니다. 이 경우에는 할당된 배열크기가 작아서 출력이 선언된 배열크기를 넘어가 제대로 출력 안된다고 생각이 되는데 왜 저 int arr[4]인 경우에는 할당크기를 넘어가는데도 출력이 정상적으로 되는지 이해하기가 어렵습니다.
답변 1
0
C 컴파일러는 배열의 index out of range 에러를 잡지 못합니다. 배열의 인덱스가 할당 범위를 벗어나도 일정 양은 벗어난 범위의 메로리에 값을 할당합니다. 즉 기본적으로 C언어는 프로그래머가 index out of range 에러를 철저히 조심해야 합니다.
배열을 main 함수 밖에 전역으로 선언하면 메모리의 데이터 영역에 할당되며 메모리의 크기가 여유롭게 잡힙니다. 하지만 main 안에 지역변수로 선언하면 메모리의 스택영역에 할당되며 크기가 작아 여유공간이 없습니다.
알고리즘 대회에서 이런 index out of range를 조심하지 않아 낭패를 보는 학생들이 많습니다. 자신의 컴퓨터에서는 정상적으로 답이 나와 채점서버에 올리면 채점서버도 에러를 내지 않지만 어뚱한 답을 출력합니다. 즉 컴퓨터에 따라 각양각색입니다. 그러므로 애초에 프로그래머가 index out of range 에러를 조심해야 합니다.
음료수 자판기 출력이 이상하게 나옵니다
0
143
2
i 값 초기화 질문
0
70
2
recipe for targe 'AA.exe' failed
0
63
1
30과 10의 xor
0
191
1
커리큘럼 문의 드립니다
0
232
1
for문에서 sum 관련 질문
0
180
1
이렇게 풀어도 맞는걸까요?
0
253
2
이렇게 풀어도 맞는 풀이일까요?
0
303
1
20페이지 홀,짝,제로 문제에서 이 코드로 짜도 괜찮을까요?
0
257
1
24. 최솟값 구하기
0
333
1
질문 있습니다.
0
325
1
배열을 전역변수로 설정하는 이유
1
666
1
41. A를 #으로에서 질문 있습니다.
0
291
1
20번 소수 판별하기에서 질문 있습니다.
0
423
1
42번 bus error;;;
0
612
1
정수형 배열에서 배열 크기
0
395
1
38. 자리찾기 커지는 방향으로..
0
303
1
37. 배열의 회전에서 ...
0
280
1
1차원 배열에서
0
270
1
지수연산에서
0
300
1
7.연필 개수 문제
0
381
1
a=(int)a 에서 왜 괄호를 붙이나요 a=int a 는 왜안되나요
0
847
1
섹션 6. 소수
0
323
1
왜 2중for문을 두개 쓴건가요?
0
244
1





