作者ot32em (reverse(wasefo);)
看板C_and_CPP
標題[問題] 塞ADDR進VECTOR為何會CRASH
時間Sun Jan 17 23:16:20 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
我有個class mat大小280
想要塞入 vector<mat*> heap
可是我在塞第三個addr of object時
就CRASH了 而且每次都是第三個就GG 是用固定SAMPLE
vector有限大小嗎!@?!?!
mat* child=0;
...
child = new mat(selected->childrenInstance[drt], mat::id_counter++,
mat::reverse_direction(drt), selected);
希望得到的正確結果:
可以塞得進去
程式跑出來的錯誤結果:
CRASH
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
dev-c++ on win7
有問題的code: (請善用置底文標色功能)
vector<mat*> heap;
heap.push_back(input); heap_push(heap.begin(),heap.end(),mat::compare);
...
mat* child=0;
mat* selected=heap[0];
...
...
child = new mat(selected->childrenInstance[drt], mat::id_counter++,
mat::reverse_direction(drt), selected);
cout << " new ok " << endl; // 這行OK
heap.push_back(child);
cout << " push ok " << endl; // 這行沒跑出來就CRASH了
所以我想應該是在PUSH時GG
補充說明:
是因為我沒 delete 嗎!?!?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.13.191
→ johnhmj:=_=?怎麼不用wxDev-C++? 01/18 02:10
→ johnhmj:物件指標最好用list<mat*>~ 01/18 02:15
→ adxis:不要塞指標 除非你要多型 就算要多型 也找個 SmartPtr用 01/18 14:38
→ adxis:或考慮改用 vector<mat> 吧 你可先resize 然後直接取出 01/18 14:39
→ adxis:最後一個element 做你要做的運算 01/18 14:40
→ adxis:或者直接用 vec.push_back(*new mat(...)); 期待compiler 01/18 14:41
→ adxis:optimization 做得好 :p 01/18 14:41