-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathft_calloc.c
51 lines (47 loc) · 2.2 KB
/
ft_calloc.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_calloc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: dolvin17 <grks_17@hotmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/24 11:38:19 by ghuertas #+# #+# */
/* Updated: 2022/04/19 18:36:30 by dolvin17 ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
#include <limits.h>
/* asigna memoria y la inicializa y rellena con zero */
void *ft_calloc(size_t count, size_t size) //parametros de entrada, cantidad de elementos y tamaño de los mismos.
{
unsigned char *p;
size_t i;
p = NULL; //igualo mi puntero a null (puede estar tomando como referencia en memoria un area ocupada por otro programa)
if (!count || (count && SIZE_MAX / count > size)) // si mi contador es 0, o mi contador es distinto de 0.
//y la division entre size_max (que es el valor max para size_t en esta arquitectura) entre count es mayor que el tamaño de mi buffer, continuo.
{
p = malloc(count * size); //reservo con malloc multiplicando la cantidad de elementos por su tamaño.
if (p != NULL)
{
i = 0; //inicializo i,
while (i < count * size) //mientas acumulador sea menor que la reserva que hice con malloc
*(p + i++) = '\0';// avanzo en la iteracion con mi puntero seteando toda esa memoria hasta contrabarra 0.
}
}
return (p); //retorno un puntero.
}
/*
# include <stdio.h>
int main(void)
{
size_t count = 12;
size_t size = 36;
void *mine = ft_calloc(count, size);
printf("Mine: %p\n", mine);
free(mine);
void *original = calloc(count, size);
printf("Original: %p\n", original);
free(original);
system("leaks a.out"); //comprobar leaks de memoria.
return (0);
}*/