gpt4 book ai didi

rust - 如何使包含 Arc 的结构字段可写?

转载 作者:行者123 更新时间:2023-11-29 08:27:02 24 4
gpt4 key购买 nike

<分区>

我有一个必须以某种方式以原始指针的形式检索的结构。

pub struct BufferData {
/// Memory map for pixel data
pub map: Arc<Box<memmap::MmapMut>>,
pub otherdata: i32,
}

我需要写入它的 map 字段,所以我将原始指针解引用到结构中,然后尝试写入它的数据字段。但是,我收到以下错误。

error[E0596]: cannot borrow immutable borrowed content `*map` as mutable
--> examples/buffer.rs:34:5
|
34 | map[0] = 9;
| ^^^ cannot borrow as mutable

如何使 map 字段可变且可写?

使用以下代码可重现该错误:

extern crate memmap;

use std::fs::File;
use std::sync::Arc;
use std::boxed::Box;
use std::ops::Deref;

pub struct BufferData {
/// Memory map for pixel data
pub map: Arc<Box<memmap::MmapMut>>,
pub otherdata: i32,
}

fn main() -> () {
// Somewhere on other module
let mut mmap = Arc::new(Box::new(unsafe {
memmap::MmapMut::map_mut(&File::open("./shm").expect("file")).expect("MmapMut")
}));
let mut bfr = BufferData {
map: mmap,
otherdata: 0,
};
let ptr: *const _ = &bfr;

// Here, I must receive and process a pointer
let mut bdata: &BufferData = unsafe { &*(ptr as *const BufferData) };
let mut map = bdata.map.deref().deref();

// Problem lies here: need to write into it, so need to be mutable
map[0] = 9;
}

crate :memmap = "0.6.2"

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com