2012-12-05 77 views
-1

我的代碼在下面,當我試圖通過我的程序「加載文件」時出現問題。它詢問我的文件名,當我給它一個它可以找到的文件名時,它只是說「Segmentation Fault」並停止運行。我認爲這個問題要麼來自loadFile方法本身,要麼來自第244行,這就是我正在編寫向鏈表添加元素的方法。任何幫助表示讚賞!謝謝。導致分段錯誤的C++鏈接列表

http://pastebin.com/7qZY9Hef

行224:

void countyElectionList::push_back(countyElectionResults * newCER){ 

    if(head == NULL) 
head = newCER; 
else 
    { 
    countyElectionResults * current = head; 
    while(current->getNextResult() != NULL){ 
     current = current->getNextResult(); 
    } 
current->setNextResult(newCER); 
} 

    } 
+1

在這裏發佈更多相關的代碼,它仍然不清楚 –

+0

我還應該發佈什麼?原始代碼太長了,所以我覺得我應該只發布與錯誤有關的內容? –

+1

你有沒有真正有理由不使用stl容器? – shuttle87

回答

2

根據您鏈接的URL的源代碼(不會編譯由於多種原因,包括失蹤支架和功能缺失的return語句,除其他事項外)的問題是在這裏:

// A constructor that initializes the private data members 
countyElectionList::countyElectionList(){ 

} 

你永遠不會初始化countyElectionList::head爲NULL,所以當你調用countyElectionList::push_backhead值將最有可能點爲NULL,但誰也不知道的什麼......因此崩潰。

供將來參考:當您調試崩潰時,如果發生崩潰的函數看起來不可疑,並且您無法找到源代碼的錯誤,並且逐步執行邏輯,您應該繼續檢查函數的調用者。

更新:所以,檢查你的新引擎收錄代碼之後(這仍然不能編譯,因爲一些功能,這要求返回值缺少return語句)的錯誤仍然是相同的功能:

// A constructor that initializes the private data members 
countyElectionList::countyElectionList(){ 
    countyElectionList::head == NULL; 
} 

請注意,您使用==這是比較運算符和而不是賦值運算符,它是=。這是正確的代碼使用:

// A constructor that initializes the private data members 
countyElectionList::countyElectionList(){ 
    head = NULL; 
} 

我不知道你是否真的甚至試圖編譯此代碼。我做了,我的編譯器立即將錯誤指向我。它甚至告訴我該怎麼做:

test.cpp(210):warning C4553:'==':運算符沒有作用;你打算 打算'='?

我也懷疑你是在你的頭上。我假設這是作業,並且你沒有做一個實際的選舉系統(,儘管...),所以我想我的下一個問題是:你有沒有考慮與你的教授交談,並解釋你如何在語法上遇到困難語言?也許你的學校有資源可以提供幫助。試圖通過在文件中隨機插入東西來編程並不能幫助你學習;這是一個挫折的練習。

+0

我在我的新版本中初始化它,並且我仍然遇到分段錯誤任何想法? –

+0

你在pastebin鏈接上的代碼將不會編譯,而我真的沒有時間讓它編譯,我懷疑你在其他地方也有類似的問題,請確保在使用變量之前對它們進行適當的初始化 –

+0

如果我上傳一個版本,你是否願意給它一個最後的樣子這是否編譯到pastebin?謝謝尼克。 –

0

嗯,首先,它看起來像你從來沒有在構造函數初始化headNULLcountyElectionList

當您稍後嘗試使用head時可能會導致問題,例如,在countyElectionList::push_back

+0

我該怎麼做?你確定? –

+0

試過了,仍然給出了分段錯誤=( –