C, deallocare una matrice.

di il
3 risposte

C, deallocare una matrice.

Salve a tutti, ho un problema:

in un codice che sto scrivendo, a un certo punto, mi viene richiesto di eliminare una matrice (di interi).

Supponiamo che io abbia una matrice chiamata
int **mat;
Mi chiedevo se per deallocarla completamente bastasse fare
free(mat);
o bisognasse deallocare, una per volta, ogni singola riga?

Cioè fare in questo modo:
for(i=0; i<nrighe; i++){

  free(mat[i]);

}

3 Risposte

  • Re: C, deallocare una matrice.

    Per ogni malloc una free.
  • Re: C, deallocare una matrice.

    Quando deallochi è importante vedere come hai allocato.
    In generale puoi adottare questa regoletta, ogni malloc vuole una free.

    Nel tuo caso immagiono abbia allocato la matrice nel seguente modo:
    
    int **m = (int **)malloc(x*sizeof(int *);
    
    for(i=0; i<x; ++i)
        m[i]=(int *)malloc(y*sizeof(int);
    
    quindi la deallocazione segue il processo inverso:
    
    for(i=0; i<x; ++i)
        free(m[i]);
    free(m);
    
    Se poi hai solo scritto :
    
    int **m = (int **)malloc(x*sizeof(int *);
    
    allora puoi deallocare scrivendo:
    
    free(m);
    
  • Re: C, deallocare una matrice.

    Grazie a tutti e due!
    Sisi io l'avevo allocata prima come doppio puntatore, cioè come un array di puntatori, e successivamente, per ogni riga (ogni puntatore a interi), avevo allocato ncolonne posizioni.

    Quindi ho un ciclo di free per le righe, e poi un ultimo free per liberare la matrice.

    Grazie mille ragazzi!!
Devi accedere o registrarti per scrivere nel forum
3 risposte