Errori di Fgets seg fault

C’è qualche ragione per cui un programma, compilato in precedenza, dovrebbe separare l’errore in un punto a causa di fget? Non ho cambiato alcun codice relativo a TUTTO. All’improvviso credo che non riesca ad aprire il file, ma l’ho testato con il file come quindici minuti fa …. Tutto ciò che ho fatto è stato aggiungere una funzione di ricerca, quindi non capisco quale sia il problema …..

Potrebbe essere il server con cui mi sto collegando su PuTTy?

int createarray( int **arrayRef, FILE *fptr){ int size = 0, i; char rawdata[100]; while (fgets(rawdata, 99, fptr) != NULL){ size++; } rewind(fptr); *arrayRef = malloc(sizeof(int) * size); for ( i = 0; i < size; i++ ){ fgets(rawdata, 99, fptr); *(*arrayRef + i) = atoi(rawdata); } return size; } int main ( int argc, char **argv ) { //main call // declare variable to hold file FILE *inFilePtr = fopen(*(argv + 1), "r"); int **aryHold; int numElements, sortchoice, key, foundindex; // Call function to create array and return num elements numElements = createarray(aryHold, inFilePtr); 

Questo è il codice che è stato compilato, eseguito correttamente e non è stato modificato da allora. GDB dice che c’è un errore con Fgets.

OK, la ragione per cui usa “lavoro” è che stai sbavando in una posizione di memoria non importante. Cambiare il codice ha spostato le cose in giro e ora stai sbavando qualcosa di importante.

Stai passando un puntatore non inizializzato a createarray (). Volevi fare qualcosa del tipo:

 int* aryHold; //... ... createarray(&aryHold ... 

A proposito, molti compilatori hanno la capacità di cogliere questo tipo di errore per te. Se non lo hai già fatto, potresti voler vedere se il tuo compilatore ha un’opzione di controllo degli errori che potrebbe aver salvato fastidi con questo (e magari trovare qualche altro codice che “funziona” solo accidentalmente).