Esercitazione debugging

Esercizio 1: Aggiornamenti

Eseguire con i debugger ddd e/o gdb e trovare il problema nel seguente programma.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#define N 5
 
/* globali */
int z[N+1];
int a[N-1];
int i;
 
void aggiorna (int k);
 
int main(void)
{
  srand(time(NULL));
  i=0;
  while (i<N)
    {
 
      aggiorna(i);
 
      printf("iterazione %d\n",i);
      i++;
    } 
  printf("exiting ...\n"); 
  return 0;
}
 
void aggiorna (int k) {
  a[k]=rand()%2;
  z[k+1]=a[k];
}

in pratica il codice, salvato in “file.c” compilato con

gcc -Wall -pedantic -o ese file.c

ed eseguito con

$ ./ese

va inspiegabilmente in ciclo all'interno del ciclo. Per eseguire in modalita' interattiva di debugging:

* oppure in

$ gdb ./ese

a questo punto e' possibile fermare il programma durante la sua esecuzione, ispezionare le variabili etc..