void *ft_calloc(size_t num, size_t size)
#include "libft.h"
void *ft_calloc(size_t num, size_t size)
{
void *ptr;
if (size != 0 && num > ((size_t)-1) / size)
return (0);
ptr = malloc(num * size);
if (!ptr)
return (0);
ft_bzero(ptr, num * size);
return (ptr);
}
((size_t) - 1)는 size_t가 표현할 수 있는 최댓값이다.
num * size > ((size_t) - 1)로 쓰지않는 이유는 size와 num을 곱해서 오버플로우가 터지면 오류가 생기기 때문이다. 그래서 곱셈을 쓰지않고 비교를 하기위해 num > ((size_t)-1) / size이 방식으로 오버플로우를 방지하는 것이다.
int main(void)
{
int *arr;
int i;
arr = (int *)ft_calloc(5, sizeof(int)); // int형 5개를 저장할 공간 할당 및 0으로 초기화
if (!arr)
return (1); // 메모리 할당 실패
for (i = 0; i < 5; i++)
printf("%d ", arr[i]); // 0 0 0 0 0 출력
free(arr);
return (0);
}