문제상황:
다음 코드는 배열을 동적으로 할당한 후, 포인터를 사용하여 배열에 접근하려고 합니다. 하지만 실행시 "segmentation fault" 에러가 발생하며 프로그램이 종료됩니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int size;
printf("Enter the size of the array: ");
scanf("%d", &size);
arr = (int *) malloc(size * sizeof(int));
for (int i = 0; i <= size; i++) {
arr[i] = i * 2;
}
printf("The array contains: ");
for (int i = 0; i <= size; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
에러로그 내용:
Segmentation fault (core dumped)
해결방법:
에러가 수정된 코드와 수정된 부분에 대한 주석
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int size;
printf("Enter the size of the array: ");
scanf("%d", &size);
arr = (int *) malloc(size * sizeof(int));
for (int i = 0; i < size; i++) { // 변경: i <= size 에서 i < size로 변경
arr[i] = i * 2;
}
printf("The array contains: ");
for (int i = 0; i < size; i++) { // 변경: i <= size 에서 i < size로 변경
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
원인분석:
이 에러의 원인은 배열 인덱스가 범위를 벗어나는 것입니다. 'i <= size' 조건을 사용하여 for 루프를 실행하면, 마지막 반복에서 배열 인덱스가 범위를 벗어나게 됩니다. 이로 인해 "segmentation fault" 에러가 발생하게 됩니다.
참고링크:
728x90