Estructuras de Datos·Sesión 2 · Semana 1
Lenguaje C: manejo de memoria
miércoles 12 de agosto · 13:00–14:15 · hace 10 días
Guía del maestro.docx
GUÍA 12-08-26 Estructuras de Datos
CN122 · miércoles 12/08/2026 · 13:00-14:15 · Sesión 2
Lenguaje C: manejo de memoria
POR QUÉ C
C obliga a manejar la memoria explícitamente. En un lenguaje con recolector de basura, las estructuras de datos funcionan sin entender qué pasa por debajo; en C no hay forma de evitarlo, y por eso se aprende de verdad.
EL MODELO DE MEMORIA DE UN PROGRAMA
- Segmento de código — las instrucciones.
- Datos estáticos y globales — viven todo el programa.
- Pila (stack) — variables locales y marcos de llamada. Se libera sola al salir de la función.
- Montículo (heap) — memoria pedida a mano con malloc. Se libera solo si tú lo haces.
TIPOS Y TAMAÑOS
- sizeof devuelve el tamaño en bytes de un tipo o variable.
- Los tamaños dependen de la plataforma: int suele ser 4 bytes y un apuntador 8 en 64 bits.
- Nunca suponer tamaños; usar sizeof siempre.
APUNTADORES
- Un apuntador guarda una dirección de memoria: int *p;
- & obtiene la dirección de una variable: p = &x;
- * accede al contenido apuntado: *p = 5;
- NULL indica que no apunta a nada válido.
MEMORIA DINÁMICA
- malloc(n) reserva n bytes y devuelve la dirección, o NULL si falla. Hay que verificar siempre.
- calloc(n, tam) reserva e inicializa en cero.
- realloc cambia el tamaño de un bloque ya reservado.
- free(p) libera. Cada malloc necesita exactamente un free.
LOS TRES ERRORES QUE VAN A PERSEGUIRTE TODO EL SEMESTRE
- Fuga de memoria — perder la referencia sin liberar.
- Apuntador colgante — usar un apuntador después de liberarlo.
- Doble liberación — llamar free dos veces sobre la misma dirección.
Ninguno de los tres produce un error inmediato. El programa parece funcionar y falla después, en otro lado. Por eso conviene usar valgrind desde la primera práctica.
EJERCICIO
Escribir un programa que reserve un arreglo dinámico, lo llene, lo redimensione con realloc y lo libere correctamente.
Mis notas148 palabras
Tareas propias de esta sesión
1.- Correr valgrind sobre un programa mío con fuga a propósito, para ver qué reporta
2.- Investigar por qué sizeof de un arreglo cambia dentro de una función