calloc 함수의 manual은 다음과 같다!



#include <stdlib.h>
void *calloc(size_t count, size_t size);
calloc 함수는 메모리를 할당하는 함수로 모두 동적으로 메모리를 할당한다.
calloc 함수는 주어진 수의 객체를 위한 메모리를 할당하고, 각 객체는 주어진 크기를 가진다.
여기서 말하는 객체란 우리가 흔히 생각하는 객체와는 조금 다르다.
여기서 사용하는 객체는 구조체나 단순 데이터 타입(int, float 등)과 같은 하나의 메모리 블록을 지칭하는 일반적인 용어로 이해할 수 있다.
다시 말해 어떤 데이터 타입도 포함할 수 있는 메모리 할당 단위라고 이해하면 된다!
calloc 함수는 할당된 메모리의 모든 바이트를 0으로 초기화한다.NULL을 반환하고 errno를 ENOMEM으로 설정한다.errno란 전역변수로 오류 코드를 설정하는 것이라고 볼 수 있다.
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
static void ft_bzero(void *s, size_t n)
{
char *str;
str = (char *) s;
while (n > 0)
{
*str = '\0';
str++;
n--;
}
}
void *ft_calloc(size_t count, size_t size)
{
void *ans;
if (size != 0 && count > SIZE_MAX / size)
{
errno = ENOMEM;
return NULL;
}
ans = malloc(size * count);
if (ans == NULL)
{
errno = ENOMEM;
return NULL;
}
ft_bzero(ans, count * size);
return (ans);
}
malloc을 구현해보고 싶긴 한데 한 번 알아봐야겠다!