小编MrT*_*ish的帖子

如何使用 cbindgen 返回并释放 Box<Vec<_>>?

我有一个从 Rust 返回到 C 代码的结构。我不知道这是否是一种好方法,但它确实可以重建结构并释放内存而不会泄漏。

#[repr(C)]
pub struct s {
    // ...
}

#[repr(C)]
#[allow(clippy::box_vec)]
pub struct s_arr {
    arr: *const s,
    n: i8,
    vec: Box<Vec<s>>,
}

/// Frees memory that was returned to C code
pub unsafe extern "C" fn free_s_arr(a: *mut s_arr) {
    Box::from_raw(s_arr);
}

/// Generates an array for the C code
pub unsafe extern "C" fn gen_s_arr() -> *mut s_arr {
    let many_s: Vec<s> = Vec::new();
    // ... logic here

    Box::into_raw(Box::new(s_arr {
        arr: many_s.as_mut_ptr(),
        n: many_s.len() …
Run Code Online (Sandbox Code Playgroud)

ffi rust

3
推荐指数
1
解决办法
1533
查看次数

标签 统计

ffi ×1

rust ×1