作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] vector當array傳 該怎作
時間Fri Apr 30 14:10:45 2010
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 大家好
: 有個小疑問
: 假如我並不知道使用者會輸入多少個資料
: 有個vector<Vector3> DataList;
: 通常win32 API也不會叫我們傳vector
: 所以如果有個函式Foo (吃 Vector3[])
: 大家都是傳 &DataList[0]??
: 還是什麼方式? 如果上面這樣傳會不會有什麼風險~
: 當然API一定也會叫我們傳 有幾個element
: 所以這樣寫應該OK吧??
OK
vector 的元素是存放在連續的空間中
: 還是有淺在的問題 例如說 vector realloc了
: 這API可能會一直對於原本你傳的&DataList[0] 位址 對值作判斷~
: 這樣應該就壞了???
對 會爛
: 如果不用vector 我想到的就只有宣告超大陣列..但這一定不好
: 是我多慮了 還是本來就不該這樣傳@@?
: thx
vector realloc 之後重新呼叫一次該 API 呢?
如果你第一次呼叫後 那個位址就不能再改
那麼這個問題無解
你不可能取得一塊大小可以任意增加卻又完全不會引發 reallocation 的記憶體空間
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.108
推 QQ29:有辦法得知vector他realloc了沒嗎?? 04/30 17:43
→ QQ29:類似callback 當他realloc我就知道該怎辦了 04/30 17:43
→ QQ29:不然她偷偷realloc 我應該不是一直狂call 該API吧@@ 04/30 17:43
推 holymars:vector有reserve,你先預留足夠的空間就不會引發realloc 04/30 18:37
→ holymars:reference裡有寫哪些函式在哪些狀況下會引發realloc.. 04/30 18:38