동적할당
기술노트
[C] 동적할당
- 동적할당이란?
> 프로그램 실행 중에 동적으로 메모리를 할당하는 것 > > Heap 영역에 할당한다
- `<stdlib.h>` 헤더 파일을 include 해야한다.
- 함수(Function)
- 메모리 할당 함수 : malloc
- `void* malloc(size_t size)`
- 메모리 할당은 size_t 크기만큼 할당해준다.
- 메모리 할당 및 초기화 : calloc
- `void* calloc(size_t nelem, sizeo_t elsize)` - 첫번째 인자는 배열요소 개수, 두번째 인자는 각 배열요소 사이즈 - 할당된 메모리를 0으로 초기화
- 메모리 추가 할당 : realloc
- `void realloc(void ptr, size_t size)` - 이미 할당받은 메모리에 추가로 메모리 할당 (이전 메모리 주소 없어짐)
- 메모리 해제 함수 : free
- `void free(void* ptr)` - 할당된 메모리 해제
중요
할당한 메모리는 반드시 해제하자 (해제안하면 메모리 릭, 누수 발생)
c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int arr[4] = { 4, 3, 2, 1 };
int* pArr;
// 동적할당 : int 타입의 사이즈 * 4만큼 메모리를 할당
pArr = (int'')malloc(sizeof(int)''4);
if(pArr == NULL) { // 할당할수 없는 경우
printf("malloc error");
exit(1);
}
for(int i = 0; i < 4; ++i) {
pArr[i] = arr[i];
}
for(int i = 0; i < 4; ++i) {
printf("%d \n", pArr[i]);
}
// 할당 메모리 해제
free(pArr);
return 0;
}
동적할당 부분 : `pArr = (int)malloc(sizeof(int)*4);`
- `(int)` : malloc의 반환형이 void이므로 형변환 - `sizeof(int)` : sizeof는 괄호 안 자료형 타입을 바이트로 연산해줌 - `*4` : 4를 곱한 이유는, arr[4]가 가진 동일한 크기의 메모리를 할당하기 위해 - `free[pArr]` : 다 사용하면 꼭 메모리 해제
- [참고 자료]