2017-05-01 53 views
-7

enter image description here有人可以幫助我確定C語言中的Seg Fault的原因以及gdb輸出的含義嗎?

當我運行程序時,它打印出「SUCCESS !!!!」如果它工作正常,但我不斷收到seg故障,我似乎無法弄清楚在哪裏。有人可以幫助我確定究竟是什麼導致SIGABRT信號,以及導致分段故障的最可能原因是什麼?

我的代碼寫在c。

編輯: 在我在97行的主要代碼中,我有函數fclose(fp),但我應該已經在另一個函數中讀過它。這裏是我的代碼的main.c:

FILE *fp = NULL; 
if(fp = fopen(full_filename, "r")){ 
    Node* tree = NULL; 
    tree = parser(fp); 
    printTree(tree, 1); 

    fclose(fp); 
} 
else 
    printf("Error file DNE\n"); 

return 0; 

功能解析器獲取文件指針,並將該文件指針稱爲掃描儀的另一個功能。然後,掃描程序會從該文件創建一個單詞列表。然後解析器檢查單詞的語法。

編輯2: 我擺脫了主要的fclose(fp),當我在gdb中運行它時,我沒有任何錯誤。但是當我在沒有gdb的情況下運行它時,我仍然遇到seg錯誤。

+0

請取[旅遊], 學提出好的問題計算器.com/help/how-to-ask, make a [mcve]。一個MCVE應包括各種樣本輸入(說明所有方面)和期望的輸出。 如果您在尋找調試代碼的幫助,請參閱https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+3

根據gdb,問題在於文件'main.c'中編號97.它看起來像是與無效指針有關。你能告訴我們代碼嗎?這樣人們將能夠爲你提供幫助 – kuro

+1

請刪除圖片並作爲文本發佈文本。使用[編輯]按鈕來完成。檢查[編輯幫助](https://stackoverflow.com/editing-help)格式化提示(您希望整個剪輯被格式化爲代碼塊)。 –

回答

0

有沒有太多的信息,但看看跟蹤,這將是我的猜測,你正試圖關閉與fclose()iofclose()文件,並且該文件可能不存在,或它不是打開。

+2

這是一條評論,而不是一個答案。 –

+0

我增加了關於程序的更多信息。但是我將文件指針發送給另一個函數並讀取該文件。然後我關閉主文件中的指針。 – Sarah

0

結論

問題必須躺在你的解析器()函數。它似乎正在改變你的文件指針並使其無效。

說明

我說明這一點,因爲我除非指針是有效的就不能進入你的if(fp = fopen(full_filename, "r"))聲明,但是當你試圖關閉它,指針似乎無效。

注意

這是能夠影響你的指針中唯一的一行表示如下因素之一:

tree = parser(fp); 
相關問題