코딩/c++

C++ 기본 문법(6)

Yellow Kirin 2025. 6. 2. 20:06

C++ 기본 문법: 동적 메모리 할당 (new / delete)


1. 동적 메모리 할당이란?

프로그램 실행 중에 필요한 만큼 메모리를 할당하는 방식임.
정적 배열은 크기를 미리 정해야 하지만, 동적 할당은 런타임에 결정 가능


2. new / delete

기본 문법


int* p = new int;   // int 1개 할당
*p = 100;

cout << *p << endl;

delete p;           // 메모리 해제
  • new: 메모리 할당 (heap 영역에)
  • delete: 할당한 메모리 해제
  • 할당받은 주소는 포인터 변수에 저장해야 함

3. 동적 배열

1차원 배열 할당


int* arr = new int[5];  // int 5개짜리 배열 할당

for (int i = 0; i < 5; i++)
    arr[i] = i * 10;

for (int i = 0; i < 5; i++)
    cout << arr[i] << " ";

delete[] arr;  // 배열은 delete[] 로 해제

2차원 배열 할당


int** matrix = new int*[3];  // 행 3개

for (int i = 0; i < 3; i++)
    matrix[i] = new int[4];  // 열 4개

matrix[0][0] = 1;  // 예시 접근

// 메모리 해제
for (int i = 0; i < 3; i++)
    delete[] matrix[i];
delete[] matrix;

4. 주의사항

  • delete 안 하면 → 메모리 누수(leak)
  • delete 후 포인터는 nullptr로 초기화 권장
  • delete는 new로 할당한 메모리만 해제해야 함
  • 배열은 반드시 delete[] 사용해야 함

5. 스마트 포인터로 대체 가능

C++11부터는 unique_ptr, shared_ptr 등의 스마트 포인터로 메모리 자동 관리 가능
직접 delete 안 해도 됨


#include <memory>

unique_ptr<int> ptr = make_unique<int>(100);
cout << *ptr << endl;

요약

  • new는 힙에 메모리 할당
  • delete로 꼭 해제해야 메모리 누수 방지
  • 배열 할당시 new[], 해제시 delete[]
  • C++11 이후는 unique_ptr, shared_ptr 사용 추천

'코딩 > c++' 카테고리의 다른 글

C++ 객체지향 문법(8)  (0) 2025.06.02
C++ 기본 문법(7)  (0) 2025.06.02
C++ 기본 문법(5)  (0) 2025.06.02
C++ 기본 문법(4)  (0) 2025.06.02
C++ 기본 문법(3)  (0) 2025.06.02