42SEOUL

[C] malloc

daykim 2021. 10. 26. 12:48

동적 할당

프로그램 실행 도중에 필요한 메모리 공간을 할당하고 사용 후 해당 공간을 해제하는 것

동적으로 메모리를 할당할 때는 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

https://codeng.tistory.com/8

https://dsnight.tistory.com/51

https://blockdmask.tistory.com/36

'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