Salve, sono ancora alle prime armi nella programmazione in C.
Ho un problemino con l'allocazione di una matrice dinamica e spero che mi aiutiate a risolverlo... Ho la necessità di allocare, all'interno di una funzione, un array bidimensionale che dovrò modificare opportunamente e restituire al main...
Riporto di seguito la porzione di programma che riguarda il mio problema:
codice:
int main ()
{
char** diz = NULL; int num;
num = Elabora_file1(diz);
if (num == -1){
return 1;
}
...........
}
La funzione Elabora_file1 così definita riceve come parametro il doppio puntatore diz ed è così strutturata:
codice:
int Elabora_file1 (char** diz)
{
FILE* pf1; int num, i=0;
pf1 = fopen(f1, "r");
if (pf1 == NULL){
printf ("Errore apertura del file!\n");
return -1;
} //Lettura del file
fscanf (pf1, "%d", &num);
diz = Alloca_diz(num);
while (fscanf(pf1, "%s", diz[i]) != EOF){
i++;
}
fclose(pf1);
return num;
}
Qualche informazione in più per capire il codice.
Il file che apro nella funzione è strutturato in modo che nella prima riga compaia il numero di parole (la cui lunghezza massima è 20 caratteri) che seguiranno...
Ad esempio:
3
ciao
miao
salve
Il numero sulla prima riga mi da dunque l'informazione necessaria per allocare la matrice..
Richiamo la funzione Alloca_diz così strutturata:
codice:
char** Alloca_diz (int num)
{
char** m; int i=0;
m = malloc(num*sizeof(char*));
for (i=0; i<20; i++){
m[i] = malloc(20*sizeof(char));
}
return m;
}
Il problema si presenta quando devo ritornare la matrice nel main e credo di aver capito il motivo...
La matrice è allocata all'interno della funzione ma NON nel main e di conseguenza le modifiche che applico sulla stessa non sono visibili nel main...
Avevo dunque pensato all'utilizzo di un TRIPLO puntatore ma non ho idea di come fare...
Qualche anima buona mi potrebbe aiutare? C'è qualche modo per evitare l'utilizzo del triplo puntatore??? Nel corso del programma dovrò riutilizzare la matrice per altre elaborazioni e quindi mi risulterebbe assai scomodo lavorare con un triplo puntatore...
Grazie in anticipo