LabASD - Dimostrazione uso di valgrind

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento: 2022-03-03

Questo programma mostra l'utilità del comando valgrind disponibile in ambiente Linux. valgrind consente di individuare, tra le altre cose, memory leak (aree di memoria che risultano ancora allocate al termine del programma) e accessi al di fuori dei limiti degli array (accessi out-of-bound). Non è uno strumento infallibile: ci sono situazioni in cui non rileva errori anche se presenti, quindi va usato con consapevolezza. Purtroppo valgrind non è disponibile su Windows a causa delle difficoltà di effettuare il porting.

Questo programma compila normalmente; Visual Studio potrebbe segnalare un warning in corrispondenza della malloc() perché non si controlla esplicitamente che il valore da essa restituito sia diverso da NULL. Tuttavia il risultato della sua esecuzione è indefinito perché effettua degli accessi in scrittura e lettura out-of-bound (si faccia riferimento al sorgente). Con "risultato indefinito" si intende che su certi sistemi potrebbe terminare, mentre su altri potrebbe produrre errori o interruzioni (crash) in fase di esecuzione. Anche nel caso in cui il programma termini, esso va comunque considerato errato in quanto gli accessi out-of-bound sono errori gravi.

Per compilare:

    gcc -std=c90 -Wall -Wpedantic -ggdb demo-valgrind.c -o demo-valgrind

(il flag -ggdb serve per includere delle informazioni di debug nel programma eseguibile, in modo che valgrind mostri anche i numeri di linea in cui si verificano eventuali problemi).

Per eseguire:

    valgrind ./demo-valgrind

File