2014-11-29 5 views
0

아래 코드는 두 개의 텍스트 파일을 연결하려고 시도하고 출력이 다른 텍스트 파일에 기록됩니다. 보시다시피 입력 파일에서 토큰을 얻으려면 yylex() 함수를 사용합니다. yywrap() 함수는 첫 번째 텍스트 파일에서 두 번째 텍스트 파일로 전달하고 EOF (End Of File)에 도달했을 때 신호를 보내줍니다. 내 동료가 제대로 작동하는 동안 내 노트북에 "Segmentation fault (core dumped)" 오류가 발생하는 이유는 무엇입니까? 나는 루트로서 터미널을 사용하고 있다고 언급한다. 이 내가 명령을 사용하는 방법입니다 :우분투의 세그먼트 오류 (코어 덤프) 12.04 yylex() 호출

::-: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)'호출이 있습니까? 왜이 터미널을 루트 권한으로 사용하고 있습니까? –

+0

@iharob 첫번째 fclose (yyin)은 첫 번째 파일을위한 것이고 두 번째 파일은 분명히 두 번째 파일을위한 것입니다. 터미널을 root로 사용하지 않으면'lex.yy.c' 파일이 생성됩니다. –

+0

일반 사용자와 동일한 오류 메시지가 나타납니다. –

답변

2

. 그래서 터미널 (루트 또는 일반)을 어떻게 사용 하느냐가 중요하지 않습니다. 문제는 입력 파일 (1 문자 및 2 문자)에 연결되었습니다. 첫째, 1 문자를 만들고 2 문자를 만들려면 파일 1text을 복사하여 붙여 넣은 다음 2text으로 이름을 바꿉니다. 그래서, 다음 질문 : 동일한 폴더에 파일을 복사하여 붙여 넣으면 어떻게됩니까?

+1

나는 이것에 대해서도 대답 해 줄 것이라고 생각한다 : 파일을 복사하여 붙여 넣을 때, 둘 다 하드 디스크에 같은 inode를 가지기 때문에 이것은 문제의 근원이 될 수있다. –