ft_calloc

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

Deixe um comentário