Sto scrivendo un semplice programma C che apre un file e legge ogni riga in un array, dove LISTS è il numero massimo di righe nel file che desidero leggere.Errore di segmentazione la seconda volta che printf viene chiamato
Tuttavia, quando MASTER_LIST è inferiore alle righe LISTS, ricevo un errore di segmentazione su printf() la seconda volta, ma non il primo (ho commentato per mostrare dove).
Sono un po 'confuso da questo comportamento, e mi chiedo che cosa lo causi e cosa posso fare per eluderlo. Idealmente, smetterei di leggere quando fgets trova la fine del file.
#define MASTER_LIST "master_list.txt"
#define LINE 64
#define LISTS 32
char **lists = malloc(LISTS * sizeof(char *));
int i;
for (i = 0; i < LISTS; i++) {
lists[i] = malloc(LINE * sizeof(char));
}
/*Open the file for reading.*/
FILE *fp = fopen(MASTER_LIST, "r");
if (fp != NULL) {
/*Each line of the file, up to LISTS is read into lists.*/
for (i = 0; i < LISTS; i++){
lists[i] = fgets(lists[i], LINE, fp);
/*NO SEGFAULT HERE*/ printf("Line Read: %s\n", lists[i]);
}
}
/*print out each line*/
for(i = 0; i < LISTS; i++){
printf("Are we segfaulting yet? %d\n", i);
/*HERE I GET A SEGFAULT*/ printf("%s\n", lists[i]);
printf("How about now? %d\n", i);
}
Sei sicuro che le stringhe siano terminate correttamente con un ''\ 0'' alla fine? –
Ho avuto l'impressione che Fgets abbia aggiunto automaticamente il terminatore nullo dopo ogni fine di riga. Sono sicuro che il mio file di testo ha solo caratteri di nuova riga per separare le righe. –
hai provato a correre sotto valgrind? –