Edição didática em português. O código e suas saídas preservam o original.
Memória dinâmica em C: malloc e calloc
Aloque, redimensione e libere memória verificando tamanhos e erros.

malloc reserva um bloco com conteúdo inicial indeterminado. calloc reserva espaço para vários elementos e zera seus bytes. Não leia memória de malloc antes de inicializá-la nem interprete a inicialização com zeros como garantia universal de representação para todos os tipos.
Verifique o resultado antes de usá-lo e calcule o tamanho sem estouro. Ao usar realloc, preserve o ponteiro original até confirmar o sucesso: se falhar com um tamanho positivo, o bloco anterior continua existindo.
Libere cada bloco uma única vez quando terminar seu uso. Não acesse após free e não libere memória automática nem endereços internos. O exemplo mostra um uso pequeno; programas reais também precisam tratar falhas de alocação.
Código C
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
size_t count = 4;
int *scores = calloc(count, sizeof *scores);
if (scores == NULL) {
fputs("Allocation failed.\n", stderr);
return 1;
}
scores[2] = 9;
for (size_t i = 0; i < count; ++i) {
printf("%d%s", scores[i], i + 1 == count ? "\n" : " ");
}
free(scores);
return 0;
}Abrir no compiladorPerguntas frequentes
Por que o código e a saída continuam em inglês?
Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.