2010-09-22 50 views
0

這段代碼內的矢量的大小給我一個錯誤分段故障而嘗試打印結構

struct state{ 
    int time_taken; 
    vector<int>time_live; 
    string loc_name; 
    vector<int>loc; 
}; 


for(int u=0;u<(A[start].loc.size());u++) 
{ 
    l=A[start].loc[1]; 
    if(A[l].time_taken < min_time) 
    { 
    min_time=A[l].time_taken; 
    finish = l; 
    } 
} 

這給出了一個segmentational故障。

+0

在它什麼線賽格故障?你有沒有檢查你的指數是有效的? – 2010-09-22 13:34:28

+0

如何聲明? – sharptooth 2010-09-22 13:35:27

+2

這缺乏最重要的信息。什麼是'A'?什麼是「開始」?將問題歸結爲一個展示問題的最小自包含示例。通常你會以這種方式找到問題。如果你不這樣做,你會有一個完美的迴應來回到這裏並問我們。你可能想學習使用調試器。 – sbi 2010-09-22 13:45:26

回答

1

首先,如果A[start]超出範圍,那麼您可能會遇到問題,根據A的不同,該問題可能是也可能不是seg故障。

其次,在循環中你有A[start].loc[1],如果A[start].loc爲空,將會超出範圍。你的意思是loc[u]

0

從上面的代碼。對於循環之前

確保

start < A.size(); 

在for循環

l = A[start].loc[u]; // instead of 1 

之前

if(A[l].time_taken < min_time) 
check 
if (l < A.size()) 
0

我喜歡安東尼·威廉斯的第一點,但我的猜測是,A[l]是出的範圍。

0

也許你可以嘗試使用A.at(開始)來訪問,如果這是超出了範圍,現在會拋出一個異常,而不是段錯誤