小编Nou*_*leb的帖子

为什么这个指针在 Rust 中释放之前会被垃圾收集


fn test() -> *const Vec<u8> {
    let b = vec![9_u8];
    let ret: *const Vec<u8> = &b;
    println!("ret ptr={:#p} inside {:#p}", ret, b.as_ptr());
    std::mem::forget(b);
    ret
}

fn main() {
    let a = test();
    let v = unsafe {
        &*a
    };
    println!("ret ptr={:#p} inside {:#p} value={}", v, v.as_ptr(), v[0]);
    println!("ret ptr={:#p} inside {:#p} value={}", v, v.as_ptr(), v[0]);
}

Run Code Online (Sandbox Code Playgroud)

我的机器给出了:

ret ptr=0x00007fffc5d85690 inside 0x00005650a61cfaa0
ret ptr=0x00007fffc5d85690 inside 0x00005650a61cfaa0 value=9
ret ptr=0x00007fffc5d85690 inside 0x00005650a572a348 value=76
Run Code Online (Sandbox Code Playgroud)

最后一行的问题是值突然改变,这是某种错误吗?

garbage-collection pointers memory-management unsafe rust

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