PDA

View Full Version : Problema Matrice C


macrig
04-08-2007, 15:43
ho un problema nella gestione di una matrice passata da una funzione al main:
questa è la funzione che uso per creare la matrice letta da file:

double** leggi_tutto(int righe, int colonne)
{
FILE *fd;
double valori[righe][colonne];
/* Lettura file */
fd = fopen("risultati.txt","r");
if(fd == NULL)
{
perror("Errore in apertura dal file");
exit(1);
}

int i;
int j;

for(i=0; i<righe; i++,!feof(fd)){
for(j=0; j<colonne; j++)
{
fscanf(fd, "%lf\n", &valori[i][j]);
cout << valori[i][j] << "\t";
}
cout << endl;
j++;
}

fclose(fd);
return valori;
}

Questo è il main:

int main()
{
double **prova = leggi_tutto(360,7);
cout << prova[1][0] << endl;
return 0;
}

i dati dal file vengano letti perfettamente, ma quando cerco di stamparlo nel main lo stampa errato.
Potete aiutarmi?
Grazie

cionci
04-08-2007, 18:18
Non si può ritornare un puntatore (in questo caso un puntatore a puntatore) se fai una allocazione statica della matrice.
Questo perché la variabile allocata staticamente viene posta nello stack della funzione e quando la funzione termina questa memoria viene liberata.
Dovresti invece usare l'allocazione dinamica tramite malloc o calloc per allocare valori.

andbin
04-08-2007, 18:39
... e aggiungo a quanto detto correttamente da cionci che un puntatore double** non ha nulla a che fare ed è tutta un'altra cosa rispetto ad un double[][].

Per dirla in altri termini: un array double v[N][M] non è compatibile con un double**