Nov*_*vus 0 undefined-behavior rust
我正在测试Rust的一些不安全功能,主要是std::ptr函数,以查看我可能导致未定义行为的方式(仅仅是出于好奇).在下面的例子中我使用std::ptr::read()移动存储的地址x为y无uninitializing x.
读完之后,我以为我有两个指向堆上相同位置的指针.我的印象是,当我离开块时,x定义了x析构函数将被运行导致y指向释放的内存.但是,当我去打印它的值时*y,它仍然打印正确的值10.我阅读文档,但似乎无法弄清楚为什么这不是UB.如果有人能为我澄清这一点,我真的很感激.
PS.我来自C背景,所以对C的解释可能会让人更容易理解实际发生的事情.
fn main() {
let mut y: Box<i32>;
{
let x: Box<i32> = Box::new(10 as i32);
unsafe {
y = ptr::read(&x);
}
}
// I thought the destructor (free) would be called here on x
// making y point to invalid memory
// However, the following call to println! still works
println!("The value of y is {}", *y);
}
Run Code Online (Sandbox Code Playgroud)
"未定义的行为"包括"它似乎正常工作".在未定义行为方面,您可以犯的最大错误是将正确的结果解释为缺少未定义的行为.
它不为我工作,顺便说一句(并在每次运行变化值).
$ cargo run
Running `target/debug/so-ub`
The value of y is -500126584
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |