본문 바로가기

프로그래밍/C언어

[C언어] calloc() 과 realloc()

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.



calloc() 과 realloc()


동적메모리를 할당 하는 방법에는 malloc() 외에 calloc()realloc()이 있습니다. 먼저 calloc()에 대해서 알아보겠습니다. calloc()은 다음과 같이 정의 되어 있습니다.


void *calloc(size_t count, size_t size);


calloc()은 두개의 매개 변수를 가지고 있습니다. 두개의 매개 변수는 각각 크기와 개수를 따로 받습니다. 다음은 malloc() 으로 메모리 할당하는 법과 calloc()으로 메모리를 할당하는 법을 비교 한 것입니다.


  malloc(10 * sizeof(int));

calloc(10, sizeof(int));


위의 함수는 각각 10 * sizeof(int) 의 메모리를 할당한 것 입니다. 또 다른 차이는 초기화하는데 있습니다. malloc는 자동으로 초기화 하지 않지만 calloc은 메모리를 자동으로 0으로 초기화 합니다. 


int *p = malloc(10 * sizeof(int));

memset(p,0,10 * sizeof(int)); 


malloc으로 메모리를 할당 하였을 경우 초기화를 할때 위의 코드와 같이 memset으로 초기화를 해주어야 하지만 calloc(10,sizeof(int)) 만 해주면 초기화가 된다. calloc에 초기화 하는 과정이 포함되어 있기 때문에 malloc에 비해 빠르고 간편합니다. 


다음으로 realloc() 에 대해서 알아 보겠습니다. realloc() 은 기존의 메모리 크기를 늘리거나 줄일 수 있는 함수 입니다. realloc() 함수는 다음과 같이 정의 되어 있습니다.


void *realloc(void *block, size_t size);


첫 번째 매개변수는 동적으로 할당 받은 메모리의 주소이고 두 번째 매개변수로는 변경하고자 하는 메모리의 크기를 넣어 주면 됩니다. 만일 첫번째 매개 변수가 NULL이면 malloc() 처럼 동작하고 두번째 매개변수가 0이면 free() 처럼 동작 합니다.


이상으로 calloc과 realloc에 대해서 알아 보았습니다.