看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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