동적 메모리 할당
정의
- 프로그램이 실행되는 동안에 메모리 공간을 할당해 값을 저장하는데 사용하는 것
- 프로그램이 실행되는 동안에 어느 정도 공간을 필요로 하는지 결정 후 할당
- 사용하지 않을 때 메모리를 직접 해제하지 않으면 Memory Leak(메모리 누수) 발생
- 동적 할당된 메모리는 포인터에 의해서 관리되며, 해당 포인터가 실종될 경우 해당 메모리 경로에 접근할 수 없어 해제도 하지 못하는 문제가 발생
사용
선언 및 할당
class DataType {};
int main()
{
DataType* data_ptr = new DataType();
DataType* data_array = new DataType[10];
return 0;
}
- 임의의 클래스
DataType이 있을 때 new 키워드를 통해 동적으로 메모리를 할당할 수 있으며, 할당된 메모리는 data_ptr 포인터를 통해 접근할 수 있음
- 단일 변수뿐만 아니라 배열도 선언해 할당할 수 있음
할당 해제
delete data_ptr;
delete[] data_array;
- 단일 변수는
delete 키워드를 통해 해제하고 배열은 delete[]를 사용해 메모리 할당을 해제할 수 있음
class DataType
{
public:
int id = 1;
string name = "Sample";
};
int main()
{
DataType* data_ptr = new DataType();
DataType* data_array = new DataType[10];
delete data_ptr;
delete[] data_array;
cout << data_ptr->id << endl;
return 0;
}
- 이미 해제된 메모리에 접근하여 값을 읽고자 하면
Garbage Value를 출력하므로 사용에 주의가 필요