UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

16.9.3. Detección y corrección de errores en programas con el depurador

Recursos

Plan de trabajo

  1. El programa strings_in_table.c inserta N strings en una tabla de M entradas tal que N >> M. La forma de hacerlo consiste en mantener una lista encadenada de strings en cada elemento de la tabla. La función main primero inserta N strings, luego borra algunos de ellos, y finalmente imprime el contenido de la tabla.

    El programa contiene cuatro errores. Uno de ellos impide su terminación. Dos de ellos permiten terminar al programa pero con resultado manifiestamente incorrecto. Finalmente, el cuarto error hace que el programa utilice más memoria de la imprescindible (580 bytes) y produce fugas de memoria.

    Utilizando el depurador, obtener una versión correcta de este programa (que termine, imprimiendo el contenido de la tabla de forma correcta, sin fugas de memoria y que utilice únicamente 580 bytes de memoria) manteniendo su funcionalidad.

  2. En la sesión de depuración del programa anterior ver el efecto que produce cuando se ejecuta el comando print y su argumento es una llamada a la función print():

    (gdb) p print(table, 5)
  3. En la sesión de depuración del programa anterior, cuando la tabla ya tiene todos los elementos insertados, seleccionar una de sus posiciones, y mediante el comando print mostrar por pantalla todos los strings almacenados en una lista encadenada.