본문 바로가기
C++/C++ 문법

C++ 동적 메모리 할당/해제 (new, delete)

by Sein_ 2025. 10. 13.
728x90

[Do it C++ 완전정복_ 112~118p]

 

동적 메모리 할당과 해제 new, delete

  • 동적 메모리 할당은 프로그램 실행 중(런타임)에 필요한 크기의 메모리를 운영체제에 요청하여 사용하는 방법
  • 배열이나 변수의 크기를 실행 중에 결정 가능합니다.
  • 할당한 메모리는 반드시 직접 해제(delete) 해야 합니다. (해제하지 않으면 메모리 누수 발생)
  • 배열을 new[]로 할당했으면 delete[]를 사용하고, 단일 변수는 delete를 사용해야 합니다.
int* ptr = new int;       // 정수 하나 동적 할당
int* arr = new int[5];    // int형 5개짜리 동적 배열

delete ptr;       // 단일 변수 메모리 해제
delete[] arr;     // 동적 배열 메모리 해제

 

메모리 누수 발생과 원인

  • 동적 변수를 생성한 후 메모리를 해제(delete)해주지 않으면 메모리 누수 발생
  • 메모리 누수는 사용한 메모리를 해제하지 않아, 힙 메모리가 점점 차오르는 현상이다.
  • 일반 변수는 자동으로 메모리가 해제되지만 동적 변수는 프로그램에 끝날때까지 자동으로 해제되지 않는다.
    • 지역 변수, 함수 인자 등은 자동으로 메모리가 해제되는 스택(Stack) 메모리 영역에 위치
    • 동적 변수는 프로그램이 끝날 때까지 자동으로 해제되지 않아 직접 해제해야 되는 힙(Heap) 메모리 영역에 위치
    • 메모리 구조 참고 (https://slowbreeze.tistory.com/232)

 

동적 메모리 할당 예제

#include <iostream>
int main() {
    int n;
    std::cout << "배열 크기 입력: ";
    std::cin >> n;

    int* arr = new int[n]; // 동적 배열 할당

    for(int i = 0; i < n; i++)
        arr[i] = i * 10; // 값 초기화

    for(int i = 0; i < n; i++)
        std::cout << arr[i] << " "; // 출력
    std::cout << std::endl;

    delete[] arr; // 메모리 해제
    return 0;
}