我想暴露一個「動態數組」到C函數。 C函數將擁有數據,稍後將調用我的函數來釋放數據。所以它會看起來像下面這樣:如何將一個盒裝切片(`Box <[T]>`)傳遞給C函數?
fn get_something(len: *mut usize) -> *mut u8;
fn dealloc_something(data: *mut u8, len: usize);
國內我有一個Box<[T]>
(my_vec.to_boxed_slice()
)。我可以很容易地獲得大小/長度,但我不知道應該返回哪個指針。如果我將從boxed_slice.as_mut_ptr()
返回的指針傳遞給,則應用程序將崩潰。但是,如果我傳遞從Box::into_raw
返回的指針,我無法找到內存佈局的保證(指針指向數組的第一個元素,並且將繼續爲所有未來的Rust版本這樣做)。
這裏有什麼解決方案?
_這意味着當你使用'boxed_slice.as_mut_ptr()'時,你基本上返回一個指向釋放內存_...的指針,實際上我使用的是'mem :: forget',但這並不重要。 – vinipsmaker
你可以將我鏈接到這種內存佈局的參考嗎? 'Box :: into_raw'會返回一個指向第一個元素的指針?如果這是真的,我的問題就回答了,我不需要再問任何其他問題。 – vinipsmaker
「切片是一個視圖,表示爲指針和長度的內存塊。」 [DOC](https://doc.rust-lang.org/std/slice/)。片數據的存儲器佈局未指定。您需要調用slice上的'as_mut_ptr'來獲取有效的數據指針。 –