DYNAMIC MEMORY

힙 메모리는 필요한 순간 직접 할당하고 끝나면 직접 해제한다

new는 힙에 공간을 만들고 포인터에 주소를 돌려준다. 사용이 끝나면 delete 또는 delete[]로 짝을 맞춰 해제해야 누수와 댕글링 포인터를 피할 수 있다.

Heap new delete
단일 new int에는 delete p를 쓴다
배열 new int[n]에는 delete[] p를 쓴다
해제 후 포인터를 nullptr로 돌려 위험한 접근을 줄인다

동적 메모리는 주소를 통해 사용하고 명시적으로 정리한다

스택 변수와 달리 함수가 끝나도 자동으로 정리되지 않는다는 점이 핵심이다.

Allocate

int* p = new int;

힙에 int 공간을 만들고 시작 주소를 포인터에 저장한다.

Use

*p = 100;

포인터 역참조나 배열 인덱싱으로 할당된 메모리를 사용한다.

Release

delete p;

사용이 끝난 힙 메모리를 돌려주고 포인터를 nullptr로 만든다.

짝을 틀리거나 해제를 잊으면 런타임 문제가 된다

현대 C++에서는 스마트 포인터가 권장되지만, 수동 관리의 위험은 정확히 이해해야 한다.

메모리 누수

new 후 해제하지 않아 힙 공간이 계속 남는다.

댕글링 포인터

이미 해제된 주소를 포인터가 계속 가리킨다.

이중 해제

같은 메모리를 두 번 delete해 프로그램이 불안정해진다.

짝 불일치

new[]delete를 쓰면 정의되지 않은 동작이 된다.