Ho modificato il codice nel modo seguente
//------------------------------------------------------//
void caricalista (TipoDispositivo **Dispo) { //*&Device
void coda (TipoDispositivo **);
FILE *ListDevPtr;
TipoDispositivo *currentPtr;
*Dispo=NULL;
if (( ListDevPtr = fopen("ListaDispositivi.dat", "rb")) == NULL){
printf("Il file non può essere aperto");
}
else{
currentPtr=*Dispo;
while(!feof(ListDevPtr)){
if(fread(¤tPtr,sizeof(TipoDispositivo),1,ListDevPtr)){
printf("Nome %s\n",currentPtr->nome);
coda(¤tPtr);
currentPtr=(*currentPtr).nextPtr;
printf("Lista Caricata");
}
else {
printf("Lista Non Caricata");
}
}
fclose(ListDevPtr);
}
}
//------------------------------------------------------//
void coda (TipoDispositivo **DevicePtr) {
TipoDispositivo *newDevicePtr;
TipoDispositivo *tailDevicePtr=malloc(sizeof(TipoDispositivo));
newDevicePtr = malloc(sizeof(TipoDispositivo));
if( newDevicePtr !=NULL) {
newDevicePtr = *DevicePtr;
newDevicePtr->nextPtr=NULL;
}
(*tailDevicePtr).nextPtr=newDevicePtr;
tailDevicePtr=newDevicePtr;
}
Premetto che uso l'espressione *Dispo=NULL; per assicurarmi che il puntatore al primo nodo sia effettivamente nullo e che quindi i dati possano provenire solamente dal file.
Se creo un dispositivo nella stessa sessione nella quale lo salvo e poi carico da file le informazioni vengono caricate ma se chiedo di stampare a video la lista dispositivi mi viene detto che è vuota.
Sono sicuro che il Dispositivo viene caricato perchè il mio fedele printf mi stampa sempre il nome del dispositivo.
Se invece creo la lista e la salvo in una sessione precedente e poi tento di caricarla mi da errore.