동적 할당
프로그램 실행 도중에 필요한 메모리 공간을 할당하고 사용 후 해당 공간을 해제하는 것
동적으로 메모리를 할당할 때는 Heap 영역에 할당된다.
헤더 : <stdlib.h>
malloc
void *malloc(size_t size);
- 메모리 할당 함수
- 할당 받을 메모리 크기를 인자로 받는다.
- 메모리 할당
- 성공 : 할당 메모리의 첫 번째 주소 리턴
- 실패 : NULL 리턴
- 기본적으로 void* 형으로 반환해주기 때문에, 사용자가 알맞은 용도로 변환하여 사용할 수 있다.
ex) int *arr = (int *) malloc (sizeof(int) * n);
1. sizeof(int) * n : n개의 int형 메모리 할당
2. (int *) : 할당된 메모리 주소가 void*형으로 리턴된다. 리턴되는 void*를 사용하려는 int*형으로 변환
3. 포인터 변수 i에 대입한다.
free
void free(void * ptr);
메모리 해제 함수
할당한 메모리를 해제한다.
할당한 메모리를 제대로 해제해주지 않으면, 메모리 누수인 메모리 leak이 발생할 수 있기때문에 꼭 해제해주어야 한다.
***
free를 시켜도 포인터는 메모리 공간을 그대로 가리킨다. 이를 허상포인터라고 한다.
따라서 ptr = null을 해주어야 메모리가 해제된 공간을 가리키지 않는다.
malloc으로 2차원 배열 만들기
int **arr;
arr = (int **) malloc (sizeof(int*) * n);
for (int i=0; i<n; i++)
{
arr[i] = (int *) malloc (sizeof(int) * m);
}
calloc
메모리 할당 및 초기화 함수
realloc
메모리 추가 할당 함수
참고 URL
'42SEOUL' 카테고리의 다른 글
[C] size_t (0) | 2021.11.18 |
---|---|
[C] LIBFT 1 (0) | 2021.11.18 |
[C] 전처리기, main() (0) | 2021.10.26 |
[C] str 함수 (0) | 2021.10.12 |
[C] 포인터 (0) | 2021.10.12 |