2013-03-31 5 views
1

я сократил программу с комментариями к этому:fclose (в) сегментация разломообразования

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    FILE * in; 
    in = fopen(argv[1], "r"); 
    fclose(in); 
    fprintf(stderr, "clear **** \n"); 
    return(0); 
} 

пока он еще ошибку сегментации. Выход:

clear 
Segmentation Fault 

Я знаю, что fclose (в), что вызывает проблему, я просто не знаю, почему. По какой-то причине fclose (out) работает отлично.

+1

Что вы передаете в командной строке? Если вызов fopen() завершается с ошибкой, вы, по сути, будете называть fclose (NULL). –

+0

И «они» говорят, что исключения - это плохо ... :-) –

+1

Всегда проверяйте возвращаемые значения функций. Файл IO терпит неудачу ... – stdcall

ответ

3

Первое, что вам нужно сделать, это что-то вроде:

in = fopen(argv[1], "r"); 
if (in == NULL) 
    printf ("Could not open file '%s'\n" argv[1]); 
else 
    fclose(in); 

Там нет никакой гарантии, в исходном коде, что fopen на самом деле работает, и в этом случае он будет возвращать NULL и fclose не будет определяться поведением.

+0

Спасибо! Это сузило его для меня много. – user2019645