Lezione 19-20

File Binari

  • Differenze tra file di testo e file binari.
  • funzioni per letture scrittura: fwrite fread
  • file binari strutturati, funzioni per movimento: fseek, ftell, rewind
  • utilizzo per memorizzare dati in formato binario: esempio, vettori, matrici.
  • utilizzo per creare piccoli database: vedere anche libro.

Memoria Dinamica

  • Differenza tra stack e heap: guardate velocemente la figura in basso nell'articolo seguente (articolo), poi leggete giusto l'inizio di (questo).
  • API: malloc, calloc, free, realloc.
  • malloc, tipo di ritorno come puntatore non tipato (void *), cast implicito in C99, (ma non in C++) quindi meglio farlo.
    int *p = (int *) malloc(sizeof(int));
  • se la malloc restituisce NULL la memoria fisica è esaurita, (difficile con i sistemi di memoria dinamica moderni, ma non controllare significa costruire codice non robusto: consiglio creare una funzione xmalloc che controlla subito dopo aver fatto la malloc se il puntatore è NULL), cosi si evita di controllare sempre.
  • Attenzione la memoria restituita NON è inizializzata, se la si vuole inizializzata (a zero) usare calloc.
  • realloc è come una free+malloc ma cerca di creare il nuovo blocco allungando o restringendo il blocco esistente per mantenere località.
  • Utilizzo:
    • Allocazione dinamica di vettori. Importante caso particolare di questo: allocazione dinamica di stringhe. Utilizzo tipico, funzione strdup:
      char * strdup(const char * s)
      {
        size_t len = 1+strlen(s);
        char *p = malloc(len);
      
        return p ? memcpy(p, s, len) : NULL;
      }
    • Allocazione dinamica di matrici: esempio.
    • Strutture dati dinamiche: liste singolarmente linkate, liste doppiamente linkate, liste bidirezionali.

Lascia un commento