【发布时间】:2022-01-21 12:11:27
【问题描述】:
我有一个Result<Vec<f64>, _>。当我尝试提取指向实际f64 数组的指针时,我观察到dptr 指向的数组是预期数组的损坏版本(前10 个字节已更改)。
为什么会发生这种情况,我该如何避免?
use std::error::Error;
fn main() {
let res: Result<Vec<f64>, Box<dyn Error>> = Ok(vec![1., 2., 3., 4.]);
let dptr: *const f64 = match res {
Ok(v) => &v[0],
Err(_) => std::ptr::null(),
};
assert_eq!(unsafe { *dptr }, 1.0);
}
结果:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `0.0`,
right: `1.0`', src/main.rs:9:5
【问题讨论】:
-
我添加了 minimal reproducible example 并链接到 Rust Playground 上的可运行版本。这将使人们很容易看到您为自己描述的内容。这是否准确地抓住了问题?如果没有,请随时更新代码和 Playground 链接。
-
我认为这确实抓住了我的问题的要点,是的。谢谢!