가변 길이 배열(Variable Length Array)은 사용자의 필요에 따라 크기를 자유롭게 지정할 수 있는 배열입니다. 즉, 컴파일 시점에 크기가 고정되는 일반 배열과 달리, 실행 시점에 원하는 크기를 유동적으로 결정할 수 있습니다.
C++에서는 new 연산자를 활용한 동적 메모리 할당을 통해 가변 길이 배열을 손쉽게 구현할 수 있습니다. 아래는 그 구현 예제입니다.
예제 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
int *array, size;
cout<<"Enter size of array: "<<endl;
cin>>size;
array = new int [size];
cout<<"Enter array elements: "<<endl;
for (int i = 0; i < size; i++)
cin>>array[i];
cout<<"The array elements are: ";
for(int i = 0; i < size; i++)
cout<<array[i]<<" ";
cout<<endl;
delete []array;
return 0;
}실행 결과
Enter size of array: 10 Enter array elements: 11 54 7 87 90 2 56 12 36 80 The array elements are: 11 54 7 87 90 2 56 12 36 80
코드 설명
위 프로그램은 다음과 같은 순서로 동작합니다.
1. 배열 초기화 및 사용자 입력 받기
먼저 정수형 포인터로 배열을 선언해 초기화한 뒤, 사용자로부터 배열의 크기와 각 요소의 값을 입력받습니다.
cout<<"Enter size of array: "<<endl; cin>>size; array = new int [size]; cout<<"Enter array elements: "<<endl; for (int i = 0; i < size; i++) cin>>array[i];
여기서 핵심은 new int[size] 부분입니다. 사용자가 입력한 크기만큼 힙(heap) 영역에 메모리를 동적으로 할당하며, for 반복문을 통해 각 인덱스에 값을 차례대로 저장합니다.
2. 배열 출력 및 메모리 해제
입력이 완료되면 배열의 모든 요소를 화면에 출력하고, delete[]를 사용해 동적으로 할당된 메모리를 해제합니다.
cout<<"The array elements are: "; for(int i = 0; i < size; i++) cout<<array[i]<<" "; cout<<endl; delete []array;
핵심 포인트 정리
- 동적 할당:
new연산자를 사용하면 실행 중에 배열 크기를 결정할 수 있습니다. - 메모리 해제 필수:
delete[]로 할당받은 메모리를 반드시 반환해야 메모리 누수(memory leak)를 방지할 수 있습니다. - 힙 영역 활용: 동적 배열은 스택이 아닌 힙에 생성되므로, 함수가 종료된 후에도 필요하다면 포인터를 통해 접근할 수 있습니다.
이처럼 C++의 동적 메모리 할당을 활용하면 고정된 크기의 제약 없이, 상황에 맞는 유연한 배열을 구현할 수 있습니다.