Как использовать стандартные типы Rust вместе с выделенной вручную памятью? - PullRequest
0 голосов
/ 01 июля 2019

Я хотел бы выделить структуру вручную и повторно использовать встроенные типы в этих структурах.Это моя первоначальная цель, см. Код ниже:

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, Iне знаю, как бороться с этим делом.Приведенный выше код может быть успешно скомпилирован, но случайным образом выдает исключение, например malloc: *** error for object 0x7000000000000000: pointer being freed was not allocated

. Могут ли встроенные типы, такие как String, использоваться вместе с объектами, выделенными вручную?Если да, то как их правильно использовать?Если нет, то почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...