Strumenti Utente

Strumenti Sito


fisica:informatica:201415:esercitazioni:esercitazione7.5

Differenze

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

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
fisica:informatica:201415:esercitazioni:esercitazione7.5 [03/02/2015 alle 16:41 (11 anni fa)] – creata Susanna Pelagattifisica:informatica:201415:esercitazioni:esercitazione7.5 [12/02/2015 alle 11:30 (11 anni fa)] (versione attuale) – [Esercizio 5: Funzione di allocazione/deallocazione di matrici] Susanna Pelagatti
Linea 1: Linea 1:
 ====== Esercitazione allocazione dinamica ====== ====== Esercitazione allocazione dinamica ======
 +
 +===== Esercizio 1: Sequenze e VLA =====
 +
 +Realizzare un programma C che legge e memorizza in un VLA una sequenza di double di lunghezza non nota a tempo di compilazione.
 +Richiedere all'utente di specificare la lunghezza prima di immettere la sequenza.
 +
 +===== Esercizio 2: Sequenze e malloc() =====
 +
 +Modificare la soluzione all'esercizio 1 in modo da utilizzare la funzione ''malloc()'' per allocare l'array dopo aver letto la lunghezza.
 +
 +Verificare la corretta allocazione e gestire gli errori.
 +
 +===== Esercizio 3: Allocazioni in grossi blocchi =====
 +Eseguire il seguente programma C  
 +<code c>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#define SIZE 10000000000
 +
 +int main (void) {
 +  double * h;
 +
 +  h = malloc(SIZE*sizeof(double));
 +  
 +  if ( h == NULL ) {
 +    perror("malloc");
 +    exit(EXIT_FAILURE);
 +  }
 +  
 +  printf("Allocato h = %p\n",(void *) h);
 +
 +  return 0;
 +}
 +</code>
 +cosa succede ? Cercate di capire che cosa succede quando va in esecuzione ''perror()'' andando a verificare il manuale (sezione 3 ''man 3 perror'')
 +
 +===== Esercizio 4: realloc() =====
 +
 +Modificare la soluzione all'esercizio 2 in modo da utilizzare la funzione ''relloc()'' per fare crescere dinamicamente l'array senza richiedere la lunghezza della sequenza.
 +
 +Verificare la corretta allocazione e gestire gli errori.
 +
 +===== Esercizio 5: Funzione di allocazione/deallocazione di matrici =====
 +
 +Le matrici possono essere rappresentate come array di puntatori a righe.
 +Si richiede di implementare le funzioni per la creazione e la deallocazione di matrici ''nxm'' di double. In particolare, la funzione
 +<code>
 +/** crea una matrice di double rappresentata come array di puntatori a righe
 +  \param n numero di righe
 +  \param m numero di colonne
 +  
 +  \retval NULL se si e' verificato un errore 
 +  \retval p puntatore alla matrice allocata altrimenti
 +  */
 +double ** mat_new (unsigned n, unsigned m);
 +</code>
 +crea una matrice con n righe ed m colonne e ne restituisce il puntatore. E
 +<code>
 +/** libera la memoria occupata da una matrice di double rappresentata come array di puntatori a righe
 +  \param a puntatore alla matrice da deallocare
 +  \param n numero di righe
 +  
 +  */
 +void mat_free (double** a, unsigned n);
 +</code>
 +Sviluppare un opportuno main che testa che l'allocazione e la deallocazione siano stata effettuata correttamente, anche in caso di errori in corso d'opera.
 +//Suggerimento//: Utilizzare mtrace per la verifica.
 +
  
fisica/informatica/201415/esercitazioni/esercitazione7.5.1422981660.txt.gz · Ultima modifica: 03/02/2015 alle 16:41 (11 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki