Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio16:esercitazionib:esercitazione2

Questa è una vecchia versione del documento!


Esercitazione 2

Dove si sperimenta qualche tool e si approfondiscono alcune caratteristiche del C sequenziale: errno, perror …

Esercizio 1: preprocessing, compilazione e linking

Seguire l'esempio dei lucidi visti nella lezione di proprocessing, compilazione e linking verificando i vari passi utilizzando il programma esempio presentato ed i comandi descritti nei lucidi presentati a lezione

Esercizio 2: verificare gli accessi in memoria: valgrind

Verificare la correttezza degli accessi ai puntatori compiuti dalle funzioni su liste di interi della libreria libList.a utilizzando valgrind. Questo strumento permette fra l'altro di capire se tutte le variabili sono inizializzate prima del loro uso, se accediamo a memoria gia' deallocata o mai allocata e situazioni similari

Per fare questo procedere come segue:

  • compilare il file da verificare con opzione -g per includere le informazioni di debugging. Ad esempio se il mio file si chiama main.c posso compilare con
bash$ gcc -Wall -pedantic -g -o prova main.c
  • eseguire
bash$ valgrind ./prova

in questo modo, a schermo verranno riportare le infrazioni rilevate. Ad esempio, invalid read o invalid write sono accessi in lettura o scrittura a memoria non allocata o gia' deallocata.

Esercizio 3: Manipolare ''errno'' e uso di ''perror()''

In C, la maggior parte delle funzioni di libreria che segnalano un errore settano anche la variabile globale errno con dei codici definiti da diversi standard. I codici sono valori interi, definiti da opportune macro. Per vadere il loro valore eseguire

bash$ man errno

Dopo l'esecuzione di una funzione di libreria che imposta errno e' possibile chiamare la funzione di libreria perror() che ispeziona il valore di errno e trasforma il valore numerico in un messaggio testuale comprensibile all'utente (vedere man perror per il suo uso). E' possibile manipolare errno da programma includendo l'header errno.h con

#include <errno.h>

L'esercizio richiede di essegnare a errno i valori EINTR EPERM EBUSY e stampare i corrispondenti messaggi di errore usando perror().

Esercizio 4: Generazione numeri casuali

Generare N numeri casuali interi nell'intervallo [0,K-1] utilizzando le funzioni rand() ed srand().

  • Calcolare il numero di occorrenze c_i di ciascun intero i nell'intervallo '[0,K-1]e stamparle sullo standard output * Per ogni i calcolare la percentuale di occorrenze sulle occorrenze totali (c_i diviso N'') e stamparle sullo standard output
  • Esaminare le occorrenze degli interi nell'intervallo e verificare che sono piuttosto vicine fra di loro
  • Che distribuzione hano i numeri generati ?
informatica/sol/laboratorio16/esercitazionib/esercitazione2.1456400519.txt.gz · Ultima modifica: 25/02/2016 alle 11:41 (9 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki