프로그래밍언어/C언어[Error]
[C언어][Error] 019. variable-sized object may not be initialized – 가변 크기 배열을 초기화하려고 함
about_IT
2025. 4. 24. 19:29
이 오류는 크기가 고정되지 않은 배열(가변 크기 배열)을 선언과 동시에 초기화하려고 할 때 발생합니다. C언어에서는 배열을 초기화할 때 반드시 컴파일 시간에 크기가 결정된 상수 크기를 사용해야 하며, 실행 중 계산된 값은 허용되지 않습니다.
즉, 함수 인자나 지역 변수 등으로 받은 값으로 배열을 선언하면서 동시에 초기화하려고 하면 이 오류가 발생합니다.
● 오류 예제
#include <stdio.h>
int main() {
int size = 3;
int arr[size] = {1, 2, 3}; // 오류 발생: 가변 크기 배열 초기화 불가
return 0;
}
컴파일러는 실행 중 결정되는 size 값으로는 초기화가 불가능하다고 판단하여 다음과 같은 오류를 출력합니다.
error: variable-sized object may not be initialized
● 해결 방법
배열의 크기가 상수일 경우에만 선언과 동시에 초기화가 가능합니다. 동적 크기 배열이 필요하다면 메모리를 수동으로 할당하거나, 초기화를 나중에 해야 합니다.
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3}; // 상수 크기 → 초기화 가능
for (int i = 0; i < 3; i++) {
printf("%d ", arr[i]);
}
return 0;
}
출력 결과:
1 2 3
또는 동적으로 크기를 설정하려면 아래처럼 초기화는 반복문을 이용해 수동으로 해야 합니다.
#include <stdio.h>
int main() {
int size = 3;
int arr[size];
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
출력 결과:
1 2 3
● 실전 팁
- 배열 초기화는 반드시 정적 크기일 때만 가능합니다. 컴파일 시간에 상수여야 합니다.
- 함수 인자로 받은 변수나 계산된 값은 배열 초기화에 사용할 수 없습니다.
- 가변 크기 배열이 필요하다면 동적 메모리 할당(malloc 등) 또는 반복문을 활용한 수동 초기화 방식으로 구현해야 합니다.
가변 크기 배열을 선언과 동시에 초기화하는 것은 C언어의 문법상 허용되지 않기 때문에, 반드시 정적인 방식으로 선언하거나 실행 중 값을 채우는 구조를 이해하고 사용하는 것이 중요합니다.