Lección 24: Seguridad de memoria — fugas y punteros colgantes
Aprendimos a pedir memoria — ahora aprendemos a no quemarnos con ella. Una fuga de memoria (memory leak) ocurre cuando pierdes el último puntero a un bloque sin liberarlo, por ejemplo asignándole a p una dirección nueva antes de free. Un double free es comportamiento indefinido, y usar un puntero de
Piensa en llaves de depósitos: una fuga es perder la única llave de una unidad llena — la unidad queda ocupada para siempre. Un double free es intentar devolver la misma llave dos veces — la recepción se vuelve loca. Un puntero colgante es usar una copia de la llave de una unidad que ya devolviste — quién sabe qué (o quién) hay ahí ahora.
- fuga de memoria (memory leak)
- Perder el último puntero a un bloque asignado sin llamar a free — la memoria se queda ocupada sin forma de liberarla.
- double free
- Llamar a free dos veces sobre el mismo bloque. Comportamiento indefinido — un fallo o corrupción de memoria.
- puntero colgante (dangling pointer)
- Un puntero que todavía guarda la dirección de un bloque liberado. Usarlo (use-after-free) es comportamiento indefinido.
- propiedad (ownership)
- La mentalidad defensiva: cada bloque tiene un 'dueño' responsable de liberarlo — exactamente una vez. Pregúntate siempre '¿quién es responsable de liberar esto?'.
- valgrind
- Una herramienta que corre tu programa y detecta fugas y errores de memoria: valgrind ./prog.