看板 C_and_CPP 關於我們 聯絡資訊
看到上列有關vector的討論串, 做了一個關於iterator的小測試 #include <vector> vector<int> p; int main() { for(int i=0;i<10;i++) p.push_back ; vector<int>::iterator it=p.begin(); while(it!=p.end()) { cout<<*it<<endl; it++; } cout<<p.capacity()<<endl; cout<<&*(it-1)<<endl; //在這邊存取it不會壞 cout<<&p[9]<<endl; p.push_back(13); cout<<&p[9]<<endl; cout<<&*(it-1)<<endl; //但push_back後再次存取就爆 } 中間印出二次&p[9], 結果值相同, 因而確認系統並沒有重新assign記憶體 而中間也沒有再變動it的值, 為什麼就會爆掉呢???? 麻煩版上大大們解惑@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.186
avhacker:記憶體重新分配後的 it-1 已經不是指向 p[9] 了 06/18 12:26
avhacker:p[9] 是在新分配的位置上,而 it-1 則還是舊的 06/18 12:27
dreamboat66:但我印出二次p[9],位址是一樣 這樣記憶體有重新分配嗎 06/18 13:34
avhacker:不然你重取一次 p.end() 試試 06/18 16:06
QQ29:我測試的結果也是 會盪 06/18 16:33
QQ29:不過改成release模式就不會 為什麼這種錯誤release不會壞呢? 06/18 16:33
QQ29:http://gist.github.com/131785 測試程式 06/18 16:35
QQ29:我不懂 的是我註解的 it==p.end()判斷 都會盪 很詭異... 06/18 16:36
QQ29:我請別人跑 卻沒有當機的情形 這是為什麼 06/18 16:36
legnaleurc:幹麻堅持要拿已失效的 iterator 再抱怨會當機啊 = = 06/18 16:53
legnaleurc:vector 就跟你說插入或刪除元素會讓 iterator 失效了 06/18 16:53