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를 쓰면 정의되지 않은
동작이 된다.