2016-02-03 2 views
-2

Я продолжаю получать ошибку сегментации. Я выяснил, что это происходит между этими двумя линиями:C - Ошибка сегментации где-то

  printf("%s - File exists!\n", file_name); 
      printf("inforloop"); 

Но я не уверен, почему ошибка сегментации сохраняется. Это весь код:

#include<stdio.h> 
#include<unistd.h> 
#include<string.h> 

FILE *fp; 
char err_message[128], file_name[128]; 

int main(int argc, char *argv[]) 
{ 
    if(argc <= 2) 
    { 
     printf("ERROR : Usage %s <file name>\n", argv[0]); 
     return 1; 
    } 
    int i = 1; 
    for(i; i< argc; i++) 
    { 
     strcpy(file_name, argv[i]); 
     if ((access(file_name, F_OK)) != -1) 
     { 
      printf("begining of for loop\n"); 
      printf("%s - File exists!\n", file_name); 
      printf("inforloop"); 
      fclose(fp); 
     } 
     else 
     { 
      sprintf(err_message, "open %s", file_name); 
      perror(err_message); 
     } 
    } 
    return 0; 
} 

Результат:

1 
begining of for loop 
date.txt - File exists! 
Segmentation fault (core dumped) 
+1

Вы не назначили 'fp'. – user2357112

+1

Похоже, C. C++ - это другой язык. Не добавляйте несвязанные теги. – Olaf

+0

Отладчик скажет вам, где именно произошла ошибка, и будет быстрее (в конечном счете), а затем использовать SO в качестве службы отладки - даже если вы застряли с необработанным GDB. – Clifford

ответ

4

Вы fclose ING fp, который вы никогда не fopen Е.Д., или даже инициализирован.

Выход отключен перед печатью inforloop, потому что ваш стандартный выход буферизируется по строке, и после inforloop нет линии подачи.

Смежные вопросы