如何将标准Rust类型与手动分配的内存一起使用?

时间:2019-07-01 12:44:42

标签: rust

我想手动分配一个结构并重用该结构中的内置类型。这是我的初衷,请参见下面的代码:

use libc::*;
use std::mem;

#[repr(C)]
#[derive(Debug)]
pub struct Person {
    pub age: u32,
    pub name: String,
}

fn main() {
    let sz = mem::size_of::<Person>();
    println!("{:#?}", sz);

    unsafe {
        let p = malloc(sz) as *mut Person;
        (*p).name = "tom".to_string();
        println!("{:#?}", *p);
        // should I explicitly free the memory used by `name` before
        // free the outer object pointer `p`? In other words, will rust
        // automatically generate some code for freeing `name`?
        free(p as *mut c_void);
    }
}

结构Person将通过使用libc::malloc进行分配,因为它有一个使用内置类型String的字段,所以我不知道如何处理这种情况。上面的代码可以成功编译,但是会随机产生malloc: *** error for object 0x7000000000000000: pointer being freed was not allocated

这样的异常

诸如String之类的内置类型是否可以与手动分配的对象一起使用?如果是这样,如何正确使用它们?如果没有,为什么不呢?

0 个答案:

没有答案