|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 64
|
Problema Matrice C
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
... 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**
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:38.



















