C++에서 동적 배열(dynamic array)은 실행 시간에 크기가 결정되는 배열로, new 연산자를 사용하여 힙(heap) 메모리에 할당합니다. 다음은 동적 배열을 초기화하는 C++ 프로그램 예제입니다.
핵심 개념
이 프로그램의 핵심은 동적으로 할당된 배열을 활용하면 함수가 종료된 후에도 유효한 배열을 반환할 수 있다는 점입니다. 일반적인 지역 배열은 스택(stack)에 생성되기 때문에 함수가 끝나면 소멸하지만, new로 할당한 배열은 힙에 존재하므로 Array() 함수에서 안전하게 반환할 수 있습니다.
예제 코드
#include <iostream>
using namespace std;
int* Array() {
int* a = new int[100]; // 힙 메모리에 정수 100개 크기의 배열 할당
a[0] = 7; // 배열 요소 초기화
a[1] = 6;
a[2] = 4;
a[3] = 5;
return a; // 동적 배열의 포인터 반환
}
int main() {
int* p = Array(); // 반환된 배열 포인터를 받음
cout << "The elements are:" << p[0] << " " << p[1] << " " << p[2] << " " << p[3];
return 0;
}실행 결과
The elements are:7 6 4 5
코드 설명
Array() 함수 내부에서 new int[100]는 정수형 요소 100개를 저장할 수 있는 메모리 공간을 힙에 할당하고, 그 시작 주소를 포인터 a에 저장합니다. 이후 인덱스 0부터 3까지 값을 각각 7, 6, 4, 5로 초기화한 뒤 포인터를 반환합니다.
main() 함수에서는 반환받은 포인터 p를 통해 배열 요소에 접근하여 화면에 출력합니다. 함수 호출이 종료되었음에도 값이 정상적으로 출력되는 이유는 배열이 힙 메모리에 있기 때문입니다.
주의 사항: 메모리 해제
new로 할당한 메모리는 자동으로 해제되지 않으므로, 사용이 끝난 후 반드시 delete[]를 호출하여 메모리 누수(memory leak)를 방지해야 합니다.
delete[] p; // 동적 배열 메모리 해제
또한 현대 C++에서는 수동 메모리 관리 대신 std::vector나 스마트 포인터(std::unique_ptr<int[]>)를 사용하는 것이 더 안전하고 권장되는 방식입니다.