【发布时间】:2021-09-07 14:45:10
【问题描述】:
我实际上是想了解如何使用带有 rust 的指针来存储和加载数据,但是当我运行这段代码时:
#[cfg(test)]
mod tests{
fn get_pointer<T>(a:T) -> *const i32{
ptr::addr_of!(a)
}
#[test]
fn f(){
unsafe {
let a = 5;
let pointer = get_pointer(a);
let encoded = bincode::serialize(&(pointer as usize)).unwrap();
let decoded = bincode::deserialize::<usize>(&encoded[..]).unwrap() as *const i32;
let b = std::ptr::read(decoded);
assert_eq!(a, b);
}
}
}
存储在b 中的值变为0 而不是5,我无法弄清楚为什么会发生这种情况以及如何解决这个问题。
我认为问题的出现是因为在函数返回指针后 a 的值被删除了,但我不确定这是否正确
【问题讨论】:
-
let pointer = (&a) as *const _;