How We Coding

< 예제코드 >


- 7라인에서 n 에 20을 대입한다면...?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int i, n;
   scanf("%d"&n);
   int *arr;
   arr = (int *)malloc(sizeof(int* n);
 
   printf("%d\n"sizeof(arr));
   arr[1= 1;
   arr[198= 2;
   printf("(%d, %d)\n", arr[1], arr[198]);
 
   for(i=0; i<200; i++)
       printf("%d: %d\n", i, arr[i]);
 
   free(arr);
 
   return 0;
}
cs


>> 7 라인에서 n에 20을 입력한다.

>> 하지만 놀랍게도(?) 14 라인의 실행결과는 (1, 2) 이다. segmentation fault 가 안뜬다.

>> 그래서 16-17의 실행결과를 확인해보니.. 값을 할당하지 않은 곳은 0으로 초기화가 되어 있고, 인덱스가 1인 곳에는 1, 인덱스가 198인 곳에는 2가 저장되어있다.

     그래서 검색을 해봤다.


- 배열의 크기를 넘어서 사용하게 되면...

>> 아래 블로그에서 원하는 답변을 얻을 수 있었다.


http://blog.naver.com/PostView.nhn?blogId=tipsware&logNo=221054714926



>> 결론만 몇가지 말하면, 문법상 오류는 아니며, 예외처리는 개발자가 알아서 해야한다고 한다.

>> 또한, 이렇게 코딩을 해도 문제가 없다고 넘어가면, 돌아오는 것은 버그 라고 한다..



- 이 의문은 같이 스터디를 하는 동생의 질문에서 시작되었다.

- 블로그에서 관련내용을 다시 잘 정리한 것 같다.


- http://www.crocus.co.kr/1171?category=278489