AnyCompiler

Memoria Dinámica

Todos los demás cursos de este sitio o bien tienen un garbage collector que recupera memoria automáticamente (Python, JavaScript, TypeScript, Java) o un sistema de ownership forzado por el compilador que lo hace de forma determinista (Rust), o la convención RAII de C++ que lo ata a la vida del objeto. C no tiene nada de eso: malloc(size) solicita un bloque de memoria sin procesar del heap, y es tuyo hasta que llames explícitamente a free() sobre él.

#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

Olvidar llamar a free() es un memory leak — la memoria permanece reservada por el resto de la vida del programa, ya que nada la recupera automáticamente. Llamar a free() dos veces sobre el mismo pointer, o usar un pointer después de liberarlo, es undefined behavior. Esta responsabilidad manual es la cosa más grande que separa a C de todos los demás lenguajes de este sitio.

A continuación: structs y pointers — combinando las dos últimas lecciones, y el error de compilación real que obtienes al confundir . y ->.

Practice exercise

Usa malloc para asignar un array de 3 ints, fíjalos en 5, 10, 15, súmalos, imprime el total, luego libera el array con free.