作者kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)
看板C_and_CPP
標題[問題] 用vector存指標,如果超過容量存位置會跑掉嗎?
時間Sat Mar 6 13:14:57 2010
我用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