2015-03-24 1 views
-7

L'ensemble complet du code qui englobe l'extrait suivant est compilé sans erreur. Cependant, lorsque je lance l'exécutable, une erreur "Segmentation fault (core dumped)" s'affiche lorsque la ligne 401 est exécutée.C++ fgets Erreur de segmentation (core dumped)

J'ai fait quelques débogage et je sais que le nom du fichier « réel » est de s'appeler en ligne 397 et je l'ai confirmé que « cur_step_buff » est 4096.

Aussi, s'il vous plaît laissez-moi savoir si plus de code est nécessaire pour aider avec ce problème.

Voici le code:

393: FILE *fd; 
394: char fd_name[512]; 
395: strcpy(fd_name,npb_list[freq][app][thread].file_name); 
396: fopen(fd_name, "r"); 
397: cout << "fd_name = " << fd_name << "\n"; 
398: char cur_step_buff[4096]; 
399: cout << sizeof(cur_step_buff) << "\n"; 
400: cout << “location line 400\n”; 
401: fgets (cur_step_buff, sizeof cur_step_buff, fd); 
402: int isEnd=0; 
403: int last_step=0; 

Répondre

0

Il se trouve que fd/fopen ne recevais pas initialisés sur la ligne 396

Le code modifié ci-dessous a permis à mon programme à exécuter:

Voici le code:

393: FILE *fd; 
394: char fd_name[512]; 
395: strcpy(fd_name,npb_list[freq][app][thread].file_name); 
396: fd = fopen(fd_name, "r"); // <<- change made to this line 
397: cout << "fd_name = " << fd_name << "\n"; 
398: char cur_step_buff[4096]; 
399: cout << sizeof(cur_step_buff) << "\n"; 
400: cout << “location line 400\n”; 
401: fgets (cur_step_buff, sizeof cur_step_buff, fd); 
402: int isEnd=0; 
403: int last_step=0; 
0

Vous avez probablement l'intention d'attribuer quelque chose à fd. Probablement le résultat de fopen(fd_name, "r");

+0

exactement, c'est pourquoi je vote pour que cela se termine. Rien à offrir aux futurs lecteurs. – gsamaras

+0

le "fd" à la fin de la ligne 401 devrait-il être "fd_name"? – chadbyoung

+0

@chadbyoung: No. –