看板 C_and_CPP 關於我們 聯絡資訊
我用VS 2008編譯。 我知道用vector當空間不夠會再自動獲得更多空間。 因此,如果我的vector存的是指標,且指標指向之前vector給我的空間, 當空間不夠時重新分配空間,我存的指標有可能會跑掉。 但我的情況是這樣: class Node{ public: int ID; int x; int y; Node(){ x = Uniform(Limit); /// x座標隨機給值:0~Limit之整數 y = Uniform(Limit); }; vector<Node*> neighbor; /// 一個陣列記錄Node的neighbor void get_Inf(); }; void getNeighbor( Node* ptr ){ //// .....計算 Node間相對距離,如果滿足某條件則互為鄰居.... /// (ptr+i)->neighbor.push_back(ptr+j); (ptr+j)->neighbor.push_back(ptr+i); } void Node::getInf(){ for(unsigned i=0; i<neighbor.size(); i++) cout<<"neighbor"<<i<<" = "<<neighbor[i]->ID<<endl; } int mian(){ Node* ptr = new Node[N]; getNeighbor( ptr ); //// Get each node info. //// for(int j = 0; j<N; j++){ cout<<"========Node:"<<j<<"============="<<'\n'; (ptr+j)->getInf(); } cout<<"=========================================="<<endl; delete ptr []; system("pause"); } 我的問題是如果我在Node class 只宣告vector空殼 最後再用function一個一個push_back,這樣子如果neighbor的空間滿了重新分配空間, 原來存的指標指向的位置還會指錯嗎? 如果還是會指錯,那該怎麼解決呢? 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.132.128.158 ※ 編輯: kkroy 來自: 202.132.128.158 (03/06 14:27)
QQ29:重新分配的不是應該是vector本身 跟他紀錄的值有關係嗎? 03/06 14:41
VictorTom:他的指標址到的空間也是vector配給的, 所以被指到的空間 03/06 14:43
VictorTom:發生relocate的時候就死掉了....@_@" 03/06 14:43
QQ29:喔那不就架構上的問題 那不就不能用vector了? 03/06 14:51
※ 編輯: kkroy 來自: 202.132.128.158 (03/06 15:36)
kkroy:To:VictorTom 那我vector裡面的指標是在mian裡就固定好N個 03/06 15:37
kkroy:即使發生reallocate也不會有問題對吧?!! 03/06 15:39
VictorTom:ㄟ~~理論上, 只是, 如果固定好N個, 開靜態或自己動態 03/06 15:40
VictorTom:new / malloc不是更乾脆嗎@_@" 03/06 15:40
kkroy:我在main裡面是new一個固定N大小的class array 03/06 15:42
kkroy:然後經過某些運算,算出object間的距離,並由neighbor紀錄 03/06 15:43
kkroy:該object的記憶體位置,所以理當neighbor這個vector 03/06 15:44
kkroy:reallocate並不會改到存的指標指的位置,我說的對吧?! 03/06 15:44
VictorTom:看起來是這樣沒錯@_@" 03/06 15:58
LPH66:其實就是一樓說的 重新分配的只有vector本身 03/06 21:50
LPH66:他紀錄的值不管是 int 是指標都沒有關係 03/06 21:50
LPH66:你要擔心的應該是指向 vector 裡面某處的指標 03/06 21:50
LPH66:(也就是 vector::iterator) 合不合法 03/06 21:50
kkroy:原來如此~謝謝你們! 我懂了! 03/07 18:32