Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio16:esercitazionia:esercitazione2

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio16:esercitazionia:esercitazione2 [01/03/2016 alle 05:46 (9 anni fa)] Massimo Torquatiinformatica:sol:laboratorio16:esercitazionia:esercitazione2 [02/03/2016 alle 20:45 (9 anni fa)] (versione attuale) Massimo Torquati
Linea 1: Linea 1:
 ====== Esercitazione 2 ====== ====== Esercitazione 2 ======
  
-Stringhe e libreria standard di IO, creazione di librerie statiche.+Stringhe e libreria standard di IO, creazione di librerie statiche, uso di ''valgrind''.\\
  
-Cercare di completare tutti gli esercizi durante le ore di laboratorio e nel caso come homework.\\ 
  
 ===== Esercizio 1: tokenizer ===== ===== Esercizio 1: tokenizer =====
  
-Scrivere un programma che data una stringa come argomento, stampa a video ('stdout') le parole contenute nella stringa in input una per ogni linea. Usare la funzione di libreria 'strtok' per estrarre i token dalla stringa. Per realizzare il programma implementare la funzione 'tokenizer' con la seguente segnatura:+Scrivere un programma che data una stringa come argomento, stampa a video (''stdout'') le parole contenute nella stringa in input una per ogni linea. Usare la funzione di libreria 'strtok' per estrarre i token dalla stringa. Per realizzare il programma implementare la funzione 'tokenizer' con la seguente segnatura:
 <code> <code>
 void tokenizer(char *stringa, FILE *out); void tokenizer(char *stringa, FILE *out);
Linea 22: Linea 21:
 ===== Esercizio 2: tokenizer_r ===== ===== Esercizio 2: tokenizer_r =====
  
-Scrivere una seconda versione del programma precedente che implementa la funzione 'tokenizer_r' che ha la stessa identica interfaccia, ma che utilizza al suo interno 'strtok_r' invece di 'strtok'. Quali sono le principali differenze tra 'tokenizer' e 'tokenizer_r' ? (Suggerimento: leggere con attenzione il 'man' di 'strtok_r').+Scrivere una seconda versione del programma precedente che implementa la funzione 'tokenizer_r' che ha la stessa identica interfaccia, ma che utilizza al suo interno ''strtok_r'' invece di ''strtok''. Quali sono le principali differenze tra 'tokenizer' e 'tokenizer_r' ? (Suggerimento: leggere con attenzione il ''man'' di ''strtok_r'').
  
-NOTA: se si utilizza l'opzione '-std=c99', per evitare i warnings del tipo ''implicit declaration of function 'strtok_r'...'' aggiungere la seguente opzione di compilazione '-D_POSIX_C_SOURCE=200112L'.+NOTA: se si utilizza l'opzione ''-std=c99'', per evitare i warnings del tipo ''implicit declaration of function 'strtok_r'...'' aggiungere la seguente opzione di compilazione ''-D_POSIX_C_SOURCE=200112L''. La funzione strtok_r fa parte dello standard POSIX-2001
  
 ===== Esercizio 3: tokenizer_rfile ===== ===== Esercizio 3: tokenizer_rfile =====
Linea 32: Linea 31:
 ===== Esercizio 4: valgrind ===== ===== Esercizio 4: valgrind =====
  
-Verificare la correttezza degli accessi in memoria utilizzando 'valgrind' del programma realizzato nell'esercizio 3. Verificare che non ci siano memory leaks all'uscita del programma.+Verificare la correttezza degli accessi in memoria utilizzando ''valgrind'' del programma realizzato nell'esercizio 3. Verificare che non ci siano memory leaks all'uscita del programma.
  
 +Valgrind permette, fra l'altro, di capire se le variabili sono inizializzate prima del loro uso, se accediamo a memoria gia' deallocata o mai allocata o a zone non inizializzate. 
 +
 +Passi:  
 +  * compilare il file da verificare con opzione ''-g'' per includere le informazioni di debugging (anche se non è strettamente necessario). 
 +  * eseguire il programma con ''valgrind'' nel modo seguente :
 +<code>
 +bash$ valgrind ./prova
 +</code>
 +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.
 +
 +Se si specifica l'opzione ''--leak-check=full'' (attenzione al doppio trattino), valgrind fornirà dettagli per ogni blocco di memoria che non è più raggiungibile o che pur essendo raggiungibile non è stato liberato, dando anche l'informazione di dove il blocco è stato allocato.
  
 ===== Esercizio 5: libtokenizer.a ===== ===== Esercizio 5: libtokenizer.a =====
informatica/sol/laboratorio16/esercitazionia/esercitazione2.1456811176.txt.gz · Ultima modifica: 01/03/2016 alle 05:46 (9 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki