Laboratorio de memoria y punteros en C
Sublista
Padres con sublistas de hijos.
1 Preparar
Los ejemplos usan las mismas operaciones públicas del TAD.
2 Predecir
Antes de ejecutar, identifica qué extremo, enlace o puntero debería cambiar y qué invariante debe conservarse.
3 Ejecutar y visualizar
Codigo C: Insertar padre
/**
* @brief Inserta un nuevo nodo padre al final de la lista principal.
* @param[in,out] lista Doble puntero a la lista principal.
* @param[in] valor_padre Valor del nuevo padre.
* @return Puntero al nuevo nodo insertado, o NULL si falla.
*/
Nodo *sublista_insertar_padre_final(Nodo **lista, int valor_padre) {
Nodo *nuevo;
Nodo *actual;
if (lista == NULL) {
return NULL;
}
nuevo = crear_padre(valor_padre);
if (nuevo == NULL) {
return NULL;
}
if (*lista == NULL) {
*lista = nuevo;
return nuevo;
}
actual = *lista;
while (actual->sgte != NULL) {
actual = actual->sgte;
}
actual->sgte = nuevo;
return nuevo;
}3 Controlar la ejecución
Actual: +0.00x (1.00x real)
Paso 0 · sin función · sin fase · sin concepto
Paso: 0/0
4 Comprender
Estructura jerarquica secuencial: cada nodo padre mantiene su propia sublista de hijos. En la animacion observa dos niveles de punteros (padres e hijos) y valida que cada operacion afecte solo la rama correspondiente sin corromper otras sublistas.
Frame actual: prepara una operación para observar concepto, cambio e invariante.
Condición y ciclo
Sin condición en este frame.
Variables C
Sin variables.
Punteros y enlaces
Sin cambios de punteros.
Heap y memoria
Sin objetos reservados.
Pila de llamadas
Sin llamadas.
5 Comparar conceptos
Selecciona una comparación para trabajar sobre dos copias independientes de la misma secuencia.
6 Reflexionar
Consola C (printf)
Historial de ejecución
Estructura del TAD
typedef struct Sublista {
int nro;
struct Sublista *sgte;
} Sublista;
typedef struct Nodo {
int nro;
struct Nodo *sgte;
Sublista *sub;
} Nodo;