C++에서는 new 키워드를 사용해 런타임 시점에 동적 배열을 생성할 수 있으며, 더 이상 필요하지 않은 메모리는 delete 키워드로 해제할 수 있습니다. 이 기법은 프로그램 실행 전에 배열의 크기를 알 수 없을 때 특히 유용합니다.
간단한 예제를 통해 살펴보겠습니다.
예제 코드
#include<iostream>
using namespace std;
int main() {
int i,n;
cout<<"Enter total number of elements:"<<"\n";
cin>>n;
int *a = new int(n);
cout<<"Enter "<<n<<" elements"<<endl;
for(i = 0;i<n;i++) {
cin>>a[i];
}
cout<<"Entered elements are: ";
for(i = 0;i<n;i++) {
cout<<a[i]<<" ";
}
cout<<endl;
delete (a);
return 0;
}
실행 결과
Enter total number of elements:7 Enter 7 elements 1 2 3 4 5 6 7 Entered elements are: 1 2 3 4 5 6 7
코드 설명
이 프로그램은 다음과 같은 순서로 동작합니다.
- 사용자에게 저장할 요소의 총 개수를 입력받습니다.
int *a = new int(n);구문으로 new 키워드를 사용해 메모리를 동적으로 할당합니다.- 반복문으로 n개의 값을 입력받아 배열에 저장한 뒤, 다시 반복문을 통해 모든 값을 출력합니다.
delete(a);호출로 할당된 메모리를 해제합니다.
참고: 올바른 동적 배열 할당 문법
C++에서 진정한 의미의 동적 배열을 할당하려면 대괄호를 사용하는 new int[n] 문법이 표준입니다. 참고로 new int(n)은 크기가 아니라 값 n으로 초기화된 단일 정수 하나를 할당하는 구문입니다. 실무 코드에서는 다음과 같이 작성하는 것이 안전합니다.
int *a = new int[n]; // n개의 정수 배열 동적 할당 // ... 배열 사용 ... delete[] a; // 배열 메모리 해제
배열 형태로 할당한 경우에는 반드시 delete[]를 사용해야 합니다. 일반 변수용 delete와 혼용하면 미정의 동작(undefined behavior)이 발생할 수 있으므로 주의해야 합니다.