看板 EE_DSnP 關於我們 聯絡資訊
呵呵我又有問題了 這次是有關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
timrau:請問你的A::_numChar是如何得到的? 01/16 18:14
timrau:另一個問題:`i' was not initialized as 0 01/16 18:14
timrau:總之在vector裡走過頭還是一樣會掛掉的 01/16 18:15
※ 編輯: BloodyDuke 來自: 140.112.240.243 (01/16 21:37)
BloodyDuke:i忘記打,已改,至於_numChar因為是用A的物件呼叫A的 01/16 21:40
BloodyDuke:someMemorFunction,所以在裡面直接access 01/16 21:41
BloodyDuke:基本上iterator沒跑過頭,但我發現一個問題,接getNum 01/16 21:54
BloodyDuke:的是int &,這樣會在class外改它的privateㄟ 01/16 21:56
BloodyDuke:但是上面改掉還是有同樣的錯誤訊息 01/16 21:57
timrau:我是問 怎樣算出A::_numChar的值... 01/16 22:16
wintercobra:可以把private的data member回傳reference嗎? 01/16 23:08
wintercobra:有於理不容的感覺,compiler應該不給過吧 01/16 23:08
BloodyDuke:恩老實說...他過了,t大的問題我的程式碼請看下篇 01/16 23:16
BloodyDuke:恩等等來試試看改private的值會怎樣 01/16 23:27
BloodyDuke:恩,winter大是對的,compile會過,但執行時crash 01/17 02:19
muxiv: _numChar的值. https://muxiv.com 07/12 00:10