aula 207

Qual a diferença entre as funções malloc e calloc?

Talvez você esteja se perguntando porque uma linguagem de programação possui duas funções para alocação dinâmica de memória? Bem, na aula de hoje vamos ver qual a diferença entre as funções de alocação dinâmica malloc e calloc!

A função malloc ela apenas aloca, separa, a quantidade de memória solicitada e retorna o ponteiro para o início daquela região de memória.

E se tiver lixo de memória?

Se existir lixo de memória em qualquer das posições de memória alocadas, esse lixo permanece lá. Você, enquanto programador, precisa fazer uma repetição e limpar todas as posições.

A função calloc, por outro lado, além de separar a quantidade de memória solicitada, ela já inicializa todas as posições com zero, o que pode ser muito útil em algumas situações.

Código completo de exemplo em C

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <stdlib.h>
/*
Aula 207: Curiosidade sobre as funções malloc e calloc
Código escrito por Wagner Gaspar
Junho de 2021
OBSERVAÇÃO:
Este é apenas um código de exemplo e ambos os vetores podem estar com o valor zero em todas as posições de memória se forem vetores pequenos e não possuir lixo de memória.
*/
int main() {
int i, *vet1, *vet2;
vet1 = malloc(10 * sizeof(int));
vet2 = calloc(10, sizeof(int));
printf("\nCom malloc: ");
for(i = 0; i < 10; i++)
printf("%d ", vet1[i]);
printf("\nCom calloc: ");
for(i = 0; i < 10; i++)
printf("%d ", vet2[i]);
return 0;
}
#include <stdio.h> #include <stdlib.h> /* Aula 207: Curiosidade sobre as funções malloc e calloc Código escrito por Wagner Gaspar Junho de 2021 OBSERVAÇÃO: Este é apenas um código de exemplo e ambos os vetores podem estar com o valor zero em todas as posições de memória se forem vetores pequenos e não possuir lixo de memória. */ int main() { int i, *vet1, *vet2; vet1 = malloc(10 * sizeof(int)); vet2 = calloc(10, sizeof(int)); printf("\nCom malloc: "); for(i = 0; i < 10; i++) printf("%d ", vet1[i]); printf("\nCom calloc: "); for(i = 0; i < 10; i++) printf("%d ", vet2[i]); return 0; }
#include <stdio.h>
#include <stdlib.h>

/*
            Aula 207: Curiosidade sobre as funções malloc e calloc

            Código escrito por Wagner Gaspar
            Junho de 2021

            OBSERVAÇÃO:
            Este é apenas um código de exemplo e ambos os vetores podem estar com o valor zero em todas as posições de memória se forem vetores pequenos e não possuir lixo de memória.
*/

int main() {

    int i, *vet1, *vet2;

    vet1 = malloc(10 * sizeof(int));
    vet2 = calloc(10, sizeof(int));

    printf("\nCom malloc: ");
    for(i = 0; i < 10; i++)
        printf("%d ", vet1[i]);

    printf("\nCom calloc: ");
    for(i = 0; i < 10; i++)
        printf("%d ", vet2[i]);

    return 0;
}

Deixe um comentário

quatro × 4 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.