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;
}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.