Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 동적 배열을 초기화하는 방법 총정리

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[]>)를 사용하는 것이 더 안전하고 권장되는 방식입니다.