PDA

Visualizza la versione completa : Allocazione dinamica


spiderontheweb
05-05-2006, 13:28
Ciao a tutti :D
Ho un problema sull'allocazione dinamica.
Devo allocare una matrice.
Per farlo creo una funzione apposita.
Quindi:



main()
{
...
FILE *file_testo;
char **matrice;
...
carica_matrice(file_testo, matrice);
...
}


La funzione carica_matrice pesca dei caratteri all'interno di un file ed è fatta così:


void carica_matrice(FILE *fp, char **matr)
{
...
matr=(char**)malloc(10*sizeof (char *))
...
matr[i]=(char*)malloc(10*sizeof (char))
...
}


Come mai quando la funzione ritorna il controllo al main, la matrice va persa?
Ho verificato che la funzione carica la matrice. :bhò:

oregon
05-05-2006, 15:29
Se un parametro viene passato per dover essere modificato, deve essere passato per puntatore. Nel tuo caso, il puntatore a puntatore deve essere passato per puntatore.
Quindi



void carica_matrice(FILE *fp, char ***matr)
{
*matr=(char**)malloc(2*sizeof (char *));
**matr=(char*)malloc(10*sizeof (char));
*((*matr)+1)=(char*)malloc(10*sizeof (char));
}

void main()
{
FILE *file_testo = NULL;
char **matrice = NULL;

// ...

carica_matrice(file_testo, &matrice);
}

spiderontheweb
05-05-2006, 16:08
Perchè 3 malloc?
Perchè nella prima hai messo 2*sizeof?

oregon
05-05-2006, 16:10
Ho fatto un esempio di matrice 2 x 10

Tu avevi una matrice 10 x 10

spiderontheweb
05-05-2006, 16:29
Ok chiaro. Grazie :ciauz:

Loading