我想暴露一个“动态数组”到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'来获取有效的数据指针。 –