Primeiro vamos as informações encontradas nos manuais:
A função calloc aloca uma requisitada memória e devolve um ponteiro para ela. A diferença entre malloc e calloc é que malloc não deixa os valores da memória zerados, enquanto a calloc deixa.
Declaração
void *calloc(size_t nitems, size_t size)
Onde:
- nitems é a quantidade de elementos para serem alocados
- size é o tamanho dos elementos
Retorno
A função retorna um ponteiro para a memória alocada. Se a alocação falhar deve retornar NULL.
Biblioteca
<stdlib.h>
Exemplo
#include <stdio.h>
#include <stdlib.h> /* Para usar calloc() */
int main (void)
{
int *p;
int a;
int i;
... /* Determina o valor de a em algum lugar */
p=(int *)calloc(a,sizeof(int)); /* Aloca a números inteiros
p pode agora ser tratado como um vetor com
a posicoes */
if (!p)
{
printf ("** Erro: Memoria Insuficiente **");
exit;
}
for (i=0; i<a ; i++) /* p pode ser tratado como um vetor com a posicoes */
p[i] = i*i;
...
return 0;
}
Implementando ft_calloc
Com a leitura do manual é possível afirmar que:
- Um ponteiro para uma área de memória deverá ser criado (void *);
- Se a alocação com malloc falhar deverá retornar NULL;
- Depois de alocado todos os valores deverão ser 0 (há uma função para isso que já foi criada =D, é a ft_bzero);
Ideia de implementação:
void *ft_calloc(size_t n, size_t size) //fazer a declaração igual a do manual
{
void *mem; //criando um ponteiro para memória
if (!(mem = malloc(n * size))); //tenta alocar com malloc os n elementos de tamanho size
return (NULL); //se a alocação falhar retorna NULL
ft_bzero(mem, n * size); //atribuindo zero a memória
return (mem); //retornando o endereço da memória
}
Referências
https://www.pucsp.br/~so-comp/cursoc/aulas/ca60.html
https://www.tutorialspoint.com/c_standard_library/c_function_calloc.htm