作者BloodyDuke (個巴樂)
看板EE_DSnP
標題[問題] vector的使用
時間Fri Jan 16 17:23:59 2009
呵呵我又有問題了
這次是有關vector的用法
以下是簡單的程式碼
Class A{
public:
vector<B*> _arr
void someMemorFunction();
......
private:
int _numChar;
};
Class B{
public:
int & getnum(){return _num;}
...
private:
int _num;
...
};
在A裡有一個B pointer的動態矩陣,然後在A的someMemorFunction裡
void A::someMemorFunction(){
int i=0;
for(vector<B*>::iterator it=_arr.begin();
i< _numChar;i++,it++){
int& num=(*it)->getnum();
...
}
其中 _numChar 是A的一個data member
(雖然這樣iterator只用一半有點怪,但我想這不是關鍵)
compile是會過的,但在執行時卻crash
使用除錯後發現是在
int& num=(*it)->getnum();
這行出錯,可是這行理論上
是取得vector中的某項,且其為一個B pointer
並藉此pointer執行getnum()
可是執行時會說
"你的程式發生存取違規的錯誤"
恩恩所以這樣vector的用法到底對不對阿
--
平常都沒問題,要寫程式才發現
~書到用時方恨少~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.240.243
1F:→ timrau:請問你的A::_numChar是如何得到的? 01/16 18:14
2F:→ timrau:另一個問題:`i' was not initialized as 0 01/16 18:14
3F:→ timrau:總之在vector裡走過頭還是一樣會掛掉的 01/16 18:15
※ 編輯: BloodyDuke 來自: 140.112.240.243 (01/16 21:37)
4F:→ BloodyDuke:i忘記打,已改,至於_numChar因為是用A的物件呼叫A的 01/16 21:40
5F:→ BloodyDuke:someMemorFunction,所以在裡面直接access 01/16 21:41
6F:→ BloodyDuke:基本上iterator沒跑過頭,但我發現一個問題,接getNum 01/16 21:54
7F:→ BloodyDuke:的是int &,這樣會在class外改它的privateㄟ 01/16 21:56
8F:→ BloodyDuke:但是上面改掉還是有同樣的錯誤訊息 01/16 21:57
9F:推 timrau:我是問 怎樣算出A::_numChar的值... 01/16 22:16
10F:→ wintercobra:可以把private的data member回傳reference嗎? 01/16 23:08
11F:→ wintercobra:有於理不容的感覺,compiler應該不給過吧 01/16 23:08
12F:→ BloodyDuke:恩老實說...他過了,t大的問題我的程式碼請看下篇 01/16 23:16
13F:→ BloodyDuke:恩等等來試試看改private的值會怎樣 01/16 23:27
14F:→ BloodyDuke:恩,winter大是對的,compile會過,但執行時crash 01/17 02:19