Malloc + free di array bidimensionali

di il
1 risposte

Malloc + free di array bidimensionali

AIUTO!!!!!!!!!!!!!!!!!!!!!

Ho allocato l'array bidimensionale "grafo" con la funzione malloc_2d

int** malloc_2d(int r)
{
int i;
int **t = malloc(r * sizeof(int*));
for (i = 0; i <=r; i++)
t[i] = malloc (r * sizeof(int));
return t;
}

int **grafo;
int V; //dimensione della matrice quadrata da allocare
grafo = malloc_2d(V);

Perchè mi da problemi di segment violation se per deallocare grafo uso la funzione free_2d???

void free_2d(int **t, int r)
{
int i;

for (i = 0; i <= r; i++) //dallocate le colonne
{
if(t[i] != NULL)
free(t[i]);
}

free(t); /*deallocato l'array che contiene gli indirizzi delle colonne*/

return ;
}

ree_2d(grafo,V);

grazie a chiunque risponda

1 Risposte

  • Re: Malloc + free di array bidimensionali

    Ciao,

    Immagino che alla variabile V tu assegni correttamente un valore (altrimenti può facilmente fallire una delle prime malloc). Detto questo:

    Un errore evidente è nel ciclo della prima malloc:
    for(i = 0; i <b><=</b>r; i++)
    Così facendo tu crei un elemento di troppo. Il controllo corretto (per avere r elementi) è for(i=0;i<b><</b>r;i++)... visto che si parte dall'elemento zero (0) l'ultimo tra r elementi avrà indice [ r-1 ]...

    Lo stesso avviene nel ciclo for della free.

    Il crash avviene per il fatto che allochi un array per r elementi e poi ne scrivi (e leggi) r+1...

    Ciaociao

    Venite a visitarci qui: http://www.bottomap.co
Devi accedere o registrarti per scrivere nel forum
1 risposte