小编Sak*_*oka的帖子

Result<Vec<f64>, _> 中指向向量第一个元素的指针已损坏

我有一个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);
}
Run Code Online (Sandbox Code Playgroud)

结果:

thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `0.0`,
 right: `1.0`', src/main.rs:9:5
Run Code Online (Sandbox Code Playgroud)

操场

pointers ownership rust

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

标签 统计

ownership ×1

pointers ×1

rust ×1