2017-08-13 26 views
-3

我有兩個C++類,我們調用一個hier和另一個cp。啓動期間,hier創建cp的實例。 cp將讀取帶有兩列的文本文件,這兩列分別稱爲resp_rresp_l,並將內容存儲在兩個同名的數組中。例如:std::vector<int> resp_r;在C++中傳遞字符串時無效指針

對於好奇的讀者,這些列代表在1秒窗口內是否發生了左鍵或右鍵按鍵。

在每個單元格中,resp_r/l然後根據文本文件具有1或0。

hier瞭解文本文件中的行數(t),並且在t上有for循環。在每一個循環中, 「問道」 cp什麼內容是resp_r/l[t],通過調用cp公共方法:string get_response(int t)

string resp; 
while (t < max_t) { 
resp = cp->get_response(t); 
... 
} 
cp

,該get_response函數的定義,像這樣:

string CP::get_response(int t) {                                                 
    if (resp_r[t] == 1) {                                                      
    return "right";                                                       
    } else if (resp_l[t] == 1) {                                                     
    return "left";                                                        
    }                                                           
    return "none";                                                        
} 

我有大約50個文件可以正常工作,但是其中一個文件不會在腳本接近文件結尾時出現。

*錯誤的`./cp_diff_vr_x.out':免費():無效的指針:0x0000000000f3e920 *

我試圖弄清楚什麼是錯在這裏。錯誤似乎發生在return語句中(返回「right」,具體而言),而不是在查詢resp_r期間發生。

+3

您的代碼中存在一處錯誤。在stackoverflow.com上只有一個人可以找到並修復這個bug。當然,這將是你,因爲只有你有完整的源代碼,並且只有你能夠運行調試器來追蹤錯誤。 –

+1

[分割故障常見原因的確定清單]的可能重複(https://stackoverflow.com/questions/33047452/definitive-list-of-common-reasons-for-segmentation-faults) –

+0

任何機會可能無效?檢查t的值與resp_r – Giel

回答

0

好的,好的,Sam Varshavchik是對的,這個bug是在一個完全不相關的地方,在另一個函數(在cp內部)訪問一個超出其分配大小的數組。令人震驚!

我發現了valgrind的錯誤,它給了我一個無效的讀取大小錯誤。

哇。自從我編寫C++代碼已經太久了。時間來結束這個項目併發送它!

謝謝大家。