Код ниже пытается объединить два текстовых файла, а вывод записывается в другой текстовый файл. Как видно, я использую функцию 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;
}
Почему у вас есть два 'fclose (yyin)' звонка? а также почему вы используете терминал как root для этого? –
@iharob первый 'fclose (yyin)' для первого файла, а второй, очевидно, для второго файла. Если я не использую терминал в качестве корневого файла root 'lex.yy.c', создайте его. –
Как обычный пользователь, я получаю такое же сообщение об ошибке. –