2013-11-29 62 views
0

我的代碼工作得很好,但是當我退出我的simpleshell時,出現了分段錯誤。 atexit(final)的最後仍然被調用並正常工作。我認爲問題在於atexit(),因爲當從代碼中刪除atexit()時,我可以正確「退出」(即CNTRL + D)simpleshell。但是,重申,一旦atexit()在我的代碼中(請參閱下面的代碼),它在退出時會導致分段錯誤(即使執行「final」)。atexit()函數應該在哪裏去以防止seg故障?

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

你是不是檢查assign62文件指針正確fopen,它看起來像你刪除它:

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