AnyCompiler

Memória Dinâmica

Todos os outros cursos deste site ou têm um garbage collector que recupera memória automaticamente (Python, JavaScript, TypeScript, Java) ou um sistema de ownership forçado pelo compilador que faz isso de forma determinística (Rust), ou a convenção RAII do C++ que vincula isso à vida do objeto. C não tem nada disso: malloc(size) solicita um bloco de memória bruta do heap, e é seu até que você chame free() explicitamente nele.

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

int main() {
    int *numbers = malloc(3 * sizeof(int));
    numbers[0] = 10;
    numbers[1] = 20;
    numbers[2] = 30;
    int sum = numbers[0] + numbers[1] + numbers[2];
    printf("%d\n", sum);
    free(numbers);
    return 0;
}
Output
60

Esquecer de chamar free() é um memory leak — a memória permanece reservada pelo resto da vida do programa, já que nada a recupera automaticamente. Chamar free() duas vezes no mesmo pointer, ou usar um pointer depois de liberá-lo, é undefined behavior. Essa responsabilidade manual é a maior coisa que separa o C de todas as outras linguagens deste site.

A seguir: structs e pointers — combinando as duas últimas lições, e o erro de compilação real que você recebe ao confundir . e ->.

Practice exercise

Use malloc para alocar um array de 3 ints, fixe-os em 5, 10, 15, some-os, imprima o total, depois libere o array com free.