malloc()과 calloc()은 메모리를 동적으로 할당하기 위해 사용되는 C언어의 함수이다. 그러나 이 두 함수는 약간의 차이가 있다.
calloc()은 주어진 요소 수와 요소 크기를 기반으로 할당된 메모리를 0으로 초기 설정한다. calloc()은 malloc()과 달리 할당된 메모리를 명시적으로 0으로 초기화하므로 일반적으로 배열 및 구조체와 같은 데이터 구조를 초기화하는 데에 사용된다.
calloc() 함수는 배열이나 구조체와 같이 메모리의 초기화가 필요한 경우에 유용합니다.
예를 들어,
다음과 같이 calloc()을 사용하여 배열을 할당할 수 있다.
int *arr;
arr = (int *) calloc(10, sizeof(int));
위의 코드는 int형 10개의 요소를 가지는 배열을 할당하고, 각 요소를 0으로 초기화한다.
malloc()은 주어진 바이트 수만큼의 메모리 블록을 할당합니다. 할당된 메모리는 이전에 할당되지 않았던 임의의 값으로 초기화됩니다. (할당된 메모리는 이전에 할당된 메모리의 내용과 무관하다.)
malloc() 함수는 초기화가 필요하지 않은 경우나 사용자가 직접 초기화를 수행할 경우에 사용할 수 있습니다.
malloc()을 사용하여 위와 같은 배열을 할당하면, 초기화를 수행하지 않는다.
int *arr;
arr = (int *) malloc(10 * sizeof(int));
위의 코드는 int형 10개의 요소를 가지는 배열을 할당하지만, 각 요소는 초기화되지 않는다. 고로 아직 arr의 값(value)은 쓰레기값이다.
아래의 예제 코드에서는 malloc() 함수를 사용하여 int형 변수 5개를 담을 수 있는 메모리 공간을 할당하고 있다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int* ptr;
ptr = (int*) malloc(5 * sizeof(int));
if(ptr == NULL) {
printf("Memory allocation failed.");
exit(0);
}
return 0;
}
아래의 예제 코드에서는 calloc() 함수를 사용하여 int형 변수 5개를 담을 수 있는 메모리 공간을 할당하고 있다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int* ptr;
ptr = (int*) calloc(5, sizeof(int));
if(ptr == NULL) {
printf("Memory allocation failed.");
exit(0);
}
return 0;
}