作者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