Fácil C

Alocação com calloc e exibição

Enunciado

Escreva um programa que aloque dinamicamente um vetor de 10 inteiros usando calloc, preencha-o com os números de 1 a 10 e depois exiba todos os elementos. Libere a memória ao final.

Requisitos

  • Usar calloc para alocar o vetor.
  • Preencher com 1 a 10 e exibir.
  • Liberar a memória com free.
  • Verificar se a alocação foi bem-sucedida.

Código inicial

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    // Seu código aqui
    return 0;
}

Saída esperada

1 2 3 4 5 6 7 8 9 10
Ver dica

Lembre-se: calloc(n, sizeof(int)) aloca e zera. Use um loop para preencher e outro para imprimir.

Mostrar solução
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    // Aloca vetor de 10 inteiros com calloc (inicializa com zero)
    int *vetor = calloc(10, sizeof(int));
    if (vetor == NULL) {
        printf("Erro: calloc falhou\n");
        return 1;
    }

    // Preenche com 1 a 10
    for (int i = 0; i < 10; i++) {
        vetor[i] = i + 1;
    }

    // Exibe os elementos
    for (int i = 0; i < 10; i++) {
        printf("%d ", vetor[i]);
    }
    printf("\n");

    // Libera a memória
    free(vetor);
    return 0;
}

Passo a passo

  1. Incluímos <stdio.h> e <stdlib.h> para usar printf e calloc/free.
  2. calloc(10, sizeof(int)) aloca espaço para 10 inteiros e inicializa todos com zero. O resultado é atribuído a int *vetor.
  3. Verificamos se vetor é NULL; se for, a alocação falhou e encerramos com código de erro.
  4. Com um laço for, preenchemos cada posição com i + 1, ou seja, de 1 a 10.
  5. Outro laço exibe os valores separados por espaço.
  6. Chamamos free(vetor) para devolver a memória ao sistema.

Por que funciona

calloc garante que a memória esteja zerada, o que é útil quando queremos inicializar um vetor. O ponteiro retornado aponta para o início do bloco contíguo, permitindo acesso indexado como um array comum. A liberação com free evita vazamentos.

Erros comuns

  • Esquecer de verificar NULL: se calloc falhar, vetor será NULL e acessá-lo causará comportamento indefinido (provavelmente segmentation fault).
    int *vetor = calloc(10, sizeof(int));
    vetor[0] = 1; // erro se calloc falhou
    
    Corrija verificando if (vetor == NULL) { ... }.
  • Não liberar a memória: o programa termina, mas em aplicações maiores isso causa vazamento. Sempre chame free.
  • Usar sizeof(int*) em vez de sizeof(int): isso aloca espaço para ponteiros, não para inteiros. Use sizeof(int) ou sizeof(*vetor).

Outra forma de resolver

Poderia usar malloc seguido de um laço para zerar, mas calloc é mais direto e eficiente para inicialização com zero.

Saída esperada

1 2 3 4 5 6 7 8 9 10