Salve a tutti,
ho un problema con le funzioni fseek e fwrite in una funzione. Spiego bene il problema: ho un programma che dovrebbe gestire un elenco di attrezzi in magazzino e dal main richiamo per ogni scelta dell'utente la funzione opportuna. Appena scelgo "1" per creare un file con record nulli la fwrite mi da un segmentation fault già alla prima invocazione nel for. Stranamente se trasferisco le righe della funzione initialize direttamente nel main l'azione va a buon fine.
#include<stdio.h>
/*Esercizio 11.12 Deitel:
Inventario dell'hardware*/
void menu(short*);
void initialize (FILE*);
void newrecord (FILE*);
void view (FILE*);
void deleterecord (FILE*);
void updaterecord (FILE*);
struct record {
int ncont;
char name[15];
int pz;
float price;
};
int main(){
short option;
FILE *source;
source=fopen("hardware.dat", "rb+");
if (source==NULL){
printf("Errore nell'apertura del file\n");
return 1;
}
menu(&option);
switch (option){
case 1:
initialize(source);
break;
case 2:
newrecord(source);
break;
case 3:
view(source);
break;
case 4:
deleterecord(source);
break;
case 5:
updaterecord(source);
break;
default:
printf("Grazie per aver usato il programma\n");
};
fclose(source);
return 0;
}
void menu(short *choice){
printf("%20s\n", "-------------------------");
printf("Inventario dell'Hardware\n");
printf("%20s\n\n", "-------------------------");
printf("Scegli una delle seguenti opzioni:\n");
printf("[1] Inizializza il documento vuoto\t");
printf("[2] Inserisci un nuovo attrezzo\n");
printf("[3] Mostra gli attrezzi\t");
printf("[4] Elimina un attrezzo\n");
printf("[5] Modifica un attrezzo\t");
printf("[any] Esci dal programma\n\n?");
scanf("%d", choice);
}
void initialize (FILE *file){
struct record emptyrecord={ 0, "", 0, 0.0 }; /*inizializza un record vuoto*/
int i;
for (i=1; i<=100; i++){
fwrite(&emptyrecord, sizeof(struct record), 1, file);
}
}
Lo stesso segmentation fault mi viene restituito anche con le altre funzioni. Ciò che proprio non mi spiego è perchè ottengo questi errori anche se ho seguito uno schema di un altro programma simile che gira bene sullo stesso pc.
Vi lascio in allegato il mio codice completo e quello del programma proposto dal libro di testo (Deitel).
Sarò immensamente grato a chi voglia rispondermi visto che fra pochi giorni ho un esame e vorrei padroneggiare bene l'accesso casuale ai file con il C.
Buonasera,
Riccardo.
Allegati: