2013-11-29 3 views
0

내 코드는 완벽하게 작동하지만 내 simpleshell을 종료하면 세그먼트 오류가 발생합니다. atexit (결승전)의 결승전은 여전히 ​​부름을 받고 제대로 작동합니다. atexit()가 코드에서 제거되면 simpleshell을 "종료"(즉 CNTRL + D) 할 수 있기 때문에 문제가 atexit()에 있다고 생각합니다. 그러나 atexit()가 내 코드 안에 있으면 (다시 말하면 그것이 어디 있는지 보시오), 종료 할 때 ("final"이 실행 되더라도) 세그먼트 화 오류가 발생합니다.seg 오류를 방지하기 위해 atexit() 함수를 사용해야하는 곳은 어디입니까?

static void final(void) { 
    flag = 0; 
    assign6 = fopen(".logfile.txt", "a"); 
    assign62 = fopen(".temp_logger.txt", "r"); 
     while(fgets(test2, sizeof(test2), assign62)) 
     { 
     fprintf(assign6, test2); 
     } 
     fclose(assign6); 
     fclose(assign62); 
     remove(".temp_logger.txt"); 
    } 
+0

항상 영원히 모든 관련 시스템 호출의 결과를 확인! – alk

답변

0

당신은 적절한 fopen의 assign62 파일 포인터를 확인하지 않는 당신이 그것을 삭제하는 것 같습니다 :

static void final(void) { 
    flag = 0; 
    assign6 = fopen(".logfile.txt", "a"); 
    assign62 = fopen(".temp_logger.txt", "r"); 
    if (assign6 && assign62) { 
     while(fgets(test2, sizeof(test2), assign62)) 
     { 
     fprintf(assign6, test2); 
     } 
     fclose(assign6); 
     fclose(assign62); 
     remove(".temp_logger.txt"); 
    } 
} 
+0

감사합니다. 이미 if 문으로 파일을 열 었는지 확인해야합니까? 무엇을 정확하게 삭제합니까? – thetypist