2014-11-29 2 views
0

Код ниже пытается объединить два текстовых файла, а вывод записывается в другой текстовый файл. Как видно, я использую функцию yylex(), чтобы получить маркеры из входных файлов. Функция yywrap() помогает мне перейти от 1-го текстового файла ко второму текстовому файлу и сигнализировать о достижении EOF (End-of-File). Почему я получаю сообщение об ошибке "Segmentation fault (core dumped)" на моем ноутбуке, а на моем коллеге он работает правильно? Я упоминаю, что я использую терминал как root. Это, как я использую команды:Ошибка сегментации (core dumped) в ubuntu 12.04 yylex() call

::-:lex tokdef.l 
::-:cc lex.yy.c -o dan -ll 
::-:./dan 1text 2text outtext 
Segmentation fault (core dumped) 

И это мой код:

%{ 
    #include<string.h> 
    int second_file = 0; 
    char *nume2; 
%} 
%% 
.; 
\n; 
%% 
int main(int argc, char *argv[]) 
{ 
    nume2=(char*)malloc(sizeof(char)*(strlen(argv[2])+1)); 
    strcpy(nume2, argv[2]); 
    yyin = fopen(argv[1], "r"); 
    yyout = fopen(argv[3], "w"); 
    yylex(); 
    fclose(yyin); 
    fclose(yyout); 
} 
int yywrap() 
{ 
    if(second_file == 0) 
    { 
     fclose(yyin); 
     yyin = fopen(nume2,"r"); 
     second_file = 1; 
     return 0; 
    } 
    else 
     return 1; 
} 
+0

Почему у вас есть два 'fclose (yyin)' звонка? а также почему вы используете терминал как root для этого? –

+0

@iharob первый 'fclose (yyin)' для первого файла, а второй, очевидно, для второго файла. Если я не использую терминал в качестве корневого файла root 'lex.yy.c', создайте его. –

+0

Как обычный пользователь, я получаю такое же сообщение об ошибке. –

ответ

2

Я полагаю, что это то, что была проблема. Поэтому не имеет значения, как использовать терминал (root или regular). Проблема была связана с входными файлами (1text и 2text). Во-первых, я создал 1text и создаю 2text, файл, который я только что скопировал, и вставьте файл 1text и переименуйте его как 2text. Итак, мой следующий вопрос: что происходит, когда я копирую и вставляю файл в одну папку?

+1

Я думаю, что для этого тоже есть ответ: при копировании и вставке файла оба имеют одинаковый индексный дескриптор на жестком диске, поэтому это может быть причиной проблемы. –

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

  • Нет связанных вопросов^_^