我想手动分配一个结构并重用该结构中的内置类型。这是我的初衷,请参见下面的代码:
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
之类的内置类型是否可以与手动分配的对象一起使用?如果是这样,如何正确使用它们?如果没有,为什么不呢?