2011-06-21 42 views
-1

我有一個像下面載體和迭代器

vector<Field> m_vField; 

我該命令填補向量定義的矢量:

AddFiled(const Field& aiField) 
{ 
    m_vField.push_back(aiField); 
} 

但是當我嘗試運行迭代器一次迭代後這墜毀矢量通過「訪問違規讀取位置」

vector<Field>::iterator it; 
for(it = m_vField.begin(); it != m_vField.end() ; it++) 
{ 
    dosomthing 
} 

感謝您的幫助。

+5

您在發佈的代碼中有兩個名稱(m_vField和vField) - 剪切/粘貼錯誤?另請說明你如何使用迭代器。 – Mat

+2

'dosomthing'是否修改'it',或者添加或移除向量中的元素?您發佈的代碼不會導致訪問衝突。 –

+0

是在類內部聲明的矢量嗎?如果你已經編寫了一個獨立的函數來插入矢量,那麼你也可以直接這樣做。 – Balanivash

回答

0

認爲您錯誤地命名了該變量。不是矢量m_vField,而您在循環中使用了vField

+2

所以代碼肯定不會編譯...但代碼崩潰... – duedl0r

+1

這仍然不能解釋爲什麼在代碼中迭代遍歷矢量會導致訪問衝突。而且,在這種情況下,當問這個問題時(雖然不總是),OP幾乎總是有一個錯字。您應該將此作爲評論發佈,而不是回答。 –

+0

hmm .. true。認爲矢量是在一個類中聲明的。毫無疑問,因爲他已經編寫了一個單獨的函數來將元素插入到矢量中,因此它也可以直接完成。 – Balanivash