Grazie per la risposta,
la funzione è questa; crea direttamente l'intera lista.
Il tipo matriceADT è un puntatore ad una struct che contiene due puntatori, rispettivamente al primo elemento della lista ed all'ultimo.
Il nome del file è passato come argomento.
codice:
elementMat *elementoPT;
matriceADT matrice;
FILE *fp;
fp=fopen(file,"r");
elementoPT=malloc(sizeof(elementMat *));
if(elementoPT==NULL) {
printf("\n\nMemoria indisponibile\n");
exit(EXIT_FAILURE);
}
if(fscanf(fp,"%d %d %d",&elementoPT->riga,&elementoPT->colonna,&elementoPT->numero) !=EOF ) {
elementoPT->link=NULL;
}
else {
printf("\n***ERRORE***\nIl file contiene dati non validi\n");
exit(EXIT_FAILURE);
}
matrice->primo=elementoPT;
matrice->ultimo=matrice->primo;
while(1) {
elementoPT->link=malloc(sizeof(elementMat *));
if(elementoPT->link==NULL) {
printf("\n\nMemoria indisponibile\n");
exit(EXIT_FAILURE);
}
elementoPT=elementoPT->link;
elementoPT->link=NULL;
if(fscanf(fp,"%d %d %d",&elementoPT->riga,&elementoPT->colonna,&elementoPT->numero) !=EOF) {
matrice->ultimo=elementoPT;
}
else {
matrice->ultimo->link=NULL; //altrimenti visualizza un'area di memoria in piu, che CMQ viene CREATA!!
break;
}
}
fclose(fp);
return(matrice);
Leggendo i valori all'interno del ciclo while, subito dopo essere stati quindi inizializzati, sono corretti.
Immediatamente fuori al ciclo, provando a leggerli, si ottengono dati sballati del campo "colonna", ma solo per termini "pari" (il secondo, il quarto,...) con questa particolare disposizione dei campi nella struct elementMat.
Grazie