作者Zoxge (Zoxge)
看板C_and_CPP
標題Re: [問題] vector因為capacity改變而產生的segmen …
時間Tue Aug 16 23:17:57 2011
※ 引述《littleshan (我要加入劍道社!)》之銘言:
: ※ 引述《Zoxge (Zoxge)》之銘言:
: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : Linux
: : 問題(Question):
: : 我的vector是 vector<ABC*> vVec;
: ^^^^
: vVec 中的 element type 是 ABC*
: [中略]
啊~的確是ABC才對,抱歉打錯了
: : setOS部份:
: : vVec.at(i).setOS( &(vVec.at(j)) );
: ^
: vVec.at(i) 是 ABC*
: 所以這邊應該是 -> 才對?
但我用 -> ,compile時就會有error了
用 . ,則沒有錯
: 另外 setOS 的參數吃的是 ABC*
: 但你給他的會是 ABC**
: : setIS部份:
: : ABC* s = &(vVec.at(i));
: 同樣的
: &(vVec.at(i)) 的型別為 ABC**
: : for(int k=0; k<s->ossize(); k++)
: : {
: : s->os(k)->setIS(s);
: : }
: 感覺 vVec 似乎應該是 vector<ABC>
: 如果真的是這樣
: 那你的麻煩就很大了
: 因為你在塞資料進 vector 時會產生 reallocation
: 所以用 &(vVec.at(i)) 取得的位址會失效
reallocaton是什麼??
那為什麼我在另外添加元素使capacity改變之前,資料存取都不會有問題呢?
: 即便不是如此
: ABC 這個 class 的結構也太異常了
異常是指??
: 就算沒這個 bug 也一定會有其它 bug 的
: 建議你把這個 class 中的功能儘量獨立出來
: 否則這種複雜的結構會讓你 debug 超級痛苦
功能獨立出來是指不要用 繼承 或 多型 嗎??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.29.203
→ james732:可以的話我真的很希望你用置底連結把完整程式貼出來 08/16 23:21
→ firejox:我懷疑可以new出vector... 08/16 23:31