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 08:49 (9 anni fa)] – [Esercizio 4: valgrind] 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.  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. 
Linea 44: Linea 43:
 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. 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'', 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.+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.1456822143.txt.gz · Ultima modifica: 01/03/2016 alle 08:49 (9 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki