相关疑难解决方法(0)

&mut unsafe { } 和 unsafe { &mut } 有什么区别?

我想将*mut指针转换为&mut引用。

// Both setting a value to ptr and getting a value from ptr succeeds.
let ptr: &mut usize = unsafe { &mut *(VIRTUAL_ADDRESS_TO_ACCESS_FREE_PAGE as *mut usize) };
Run Code Online (Sandbox Code Playgroud)

这有效。但是,如果&mutunsafe块之外,代码将无法部分工作。*ptr = foo不会存储foo到内存ptr点,但let foo = *ptr会将值分配*ptrfoo

// Setting a value to ptr fails, but getting a value from ptr succeeds.
let ptr: &mut usize = &mut unsafe { *(VIRTUAL_ADDRESS_TO_ACCESS_FREE_PAGE as *mut usize) …
Run Code Online (Sandbox Code Playgroud)

rust

9
推荐指数
1
解决办法
215
查看次数

从可变借用的结构中可变借用字段

从借用规则来看:

  • 在任何给定时间,您可以拥有一个可变引用或任意数量的不可变引用。

下面,我有一个 Foo 结构(整个结构)的可变借用,这意味着我借用了该结构的每个字段。不过,我可以在功能上再借用一下它的领域demo。我怀疑我有两个可变引用x.a

#[derive(Debug)]
struct Foo {
    a: i32,
    b: i32,
}

fn demo(foo: &mut Foo) {
    // the `foo` is mutable borrow
    // should have exclusive access to all elements of Foo instance
    // However,
    let bar = &mut foo.a; // second ref to `x.a`
    *bar += 1;
    let baz = &foo.b;

    println!("{:?}", bar);
    println!("{:?}", baz);
}


fn main() {
    let mut x = Foo { a: 10, b: 1 };
    let foo …
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

rust ×2