Lenguaje C: manejo de memoria

miércoles 12 de agosto · 13:0014: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
.docx
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