Heap 영역은 내가 할당하려는 크기 이상을 참조해도 에러가 나지 않는 경우가 있다.
int N;
scanf("%d", &N);
int *s = (int *)malloc(sizeof(int));
for (int i = 0; i < N; i++)
scanf("%d", s + i);
for (int i = 0; i < N; i++)
printf("%d\n", *(s + i));
그래서 여기서 에러가 나지 않고 잘 작동하는 것이다.
그렇지만 동적할당을 여러번 할 경우에는 메모리가 겹칠 수도 있기 때문에 아래와 같이 N을 곱해서 사용한다.
int N;
scanf("%d", &N);
int *s = (int *)malloc(sizeof(int)*N);
for (int i = 0; i < N; i++)
scanf("%d", s + i);
for (int i = 0; i < N; i++)
printf("%d\n", *(s + i));
컴퓨터 구조에서 더 자세히 배울 수 있다고 한다. 컴퓨터공학을 전공하는 친구가 알려줬는데 컴퓨터는 정말 신기하다.