calloc 함수 구현하기

윤효준·2024년 8월 8일
0

42 Libft 복습

목록 보기
20/28

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

Synopsis

#include <stdlib.h>

void	*calloc(size_t count, size_t size);

Description

  • calloc 함수는 메모리를 할당하는 함수로 모두 동적으로 메모리를 할당한다.

  • calloc 함수는 주어진 수의 객체를 위한 메모리를 할당하고, 각 객체는 주어진 크기를 가진다.

객체란???

여기서 말하는 객체란 우리가 흔히 생각하는 객체와는 조금 다르다.
여기서 사용하는 객체는 구조체나 단순 데이터 타입(int, float 등)과 같은 하나의 메모리 블록을 지칭하는 일반적인 용어로 이해할 수 있다.
다시 말해 어떤 데이터 타입도 포함할 수 있는 메모리 할당 단위라고 이해하면 된다!

  • calloc 함수는 할당된 메모리의 모든 바이트를 0으로 초기화한다.

Return Values

  • 할당에 성공하면 0으로 초기화된 메모리 블록의 포인터를 반환한다.
  • 할당에 실패하면 NULL을 반환하고 errnoENOMEM으로 설정한다.

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을 구현해보고 싶긴 한데 한 번 알아봐야겠다!

profile
작은 문제를 하나하나 해결하며, 누군가의 하루에 선물이 되는 코드를 작성해 갑니다.

0개의 댓글