프로그램이 실행 중 일 때 heap 영역에 메모리 공간을 할당하는 것
반드시 포인터가 필요함 (동적 할당 함수가 할당된 공간의 주소를 반환)
c언어 동적 할당(malloc, calloc)
void* malloc(size_t size);
void* 형: 주소를 저장하는 용도이지만 어떤 타입의 주소인지 모를 경우
void* 형을 사용할 경우 어떤 자료형의 주소 형식인지 반드시 명시적 형변환을 수행해야함
size_t : heap 영역에 할당할 메모리의 크기(byte)
int* ptr = (int*)malloc(sizeof(int));
*ptr = 100;
int* ptr2 = (int*)malloc(sizeof(int)*4); 동적 배열, 런타임에 배열을 생성
void* calloc(int count, size_t size);
동적 배열을 만들 때 더 유용
int* ptr = (int*)calloc(4,sizeof(int));
할당 받은 heap공간을 자동으로 0 초기화
c언어 메모리 반환 함수(free)
void free(void* ptr);
int* ptr = (int*)malloc(sizeof(int));
cout<<ptr<<endl; heap 영역의 주소
free(ptr) heap 영역의 사용 '권한'을 반납
ptr = nullptr; 포인터 초기화
free 함수를 사용해도 포인터를 사용하여 해당 메모리에 접근이 가능하므로 포인터도 꼭 null 초기화를 해줘야 한다
**c++동적 할당(new)
int* p = new int(100); new 연산자 : heap 영역에 모모리를 할당해주는 연산자
new 자료형(초기화 값) 으로 선언시에 초기화 값을 지정해 줄 수 있다.
int* pArr = new int[5]{1,2,3,4,5};
[]를 사용하여 여러개의 메모리를 할당 할 수 있다(동적 배열)
이후 {}를 사용하여 초기화 가능
delete p; delete 연산자 : 할당했던 메모리를 반환하는 연산자
p = nullptr; 포인터 초기화
delete[] pArr; 동적 배열을 메모리에서 반환 할 시 []연산자를 반드시 기입해야 함
pArr = nullptr;