Online C Compiler
Abrir no compilador

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.

Abrir no compilador

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 compilador

Perguntas 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.