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
callocpara 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
- Incluímos
<stdio.h>e<stdlib.h>para usarprintfecalloc/free. calloc(10, sizeof(int))aloca espaço para 10 inteiros e inicializa todos com zero. O resultado é atribuído aint *vetor.- Verificamos se
vetoréNULL; se for, a alocação falhou e encerramos com código de erro. - Com um laço
for, preenchemos cada posição comi + 1, ou seja, de 1 a 10. - Outro laço exibe os valores separados por espaço.
- 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: secallocfalhar,vetorseráNULLe acessá-lo causará comportamento indefinido (provavelmente segmentation fault).
Corrija verificandoint *vetor = calloc(10, sizeof(int)); vetor[0] = 1; // erro se calloc falhouif (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 desizeof(int): isso aloca espaço para ponteiros, não para inteiros. Usesizeof(int)ousizeof(*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