[C++] 동적할당과 메모리 해제

정적할당 vs 동적할당

정적할당

정적할당이란 프로그램에서 미리 메모리를 할당받는 방식이다. 컴파일 타임에 메모리의 크기와 위치가 결정된다.

#include <iostream>

int main() {
    // 정적 할당: 배열의 크기가 고정되어 있음
    int arr[5] = {1, 2, 3, 4, 5};

    // 배열 요소 출력
    for(int i = 0; i < 5; ++i) {
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
    }

    return 0;
}

 

동적할당

동적할당이란 사용자의 지정에 따라 메모리를 할당받는 방식이다. 런타임에 메모리의 크기와 위치가 결정되며 필요에 따라 메모리를 할당받는 것이기 때문에 별도로 메모리 해제도 해야한다.

#include <iostream>

int main() {
    // 동적 할당: 배열의 크기를 런타임에 결정
    int n;
    std::cout << "Enter the size of the array: ";
    std::cin >> n;

    // 동적으로 메모리 할당
    int* arr = new int[n];

    // 배열 요소 초기화 및 출력
    for(int i = 0; i < n; ++i) {
        arr[i] = i + 1;
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
    }

    // 동적 메모리 해제
    delete[] arr;

    return 0;
}

 

할당과 해제

메모리를 할당받았으면 사용 후에 반드시 해제해야한다. 할당 키워드는 new, 해제 키워드는 delete이다. 메모리 해제의 경우, 변수 앞에 delete을 사용해도 되나 배열의 경우, 변수 앞에 []를 사용한다.

메모리할당

// 동적할당
int n;
cin >> n;
int *arr = new int[n];

메모리 해제

delete []arr; // 동적할당으로 생성 된 배열의 경우 메모리 해제