考虑以下 Rust 程序:
fn main() {
let mut z : Vec<Vec<(bool,f64)>> = Vec::with_capacity(10);
unsafe { z.set_len(10); }
z[0] = vec!((true,1.));
println!("{:?}", z[0]);
}
https://play.rust-lang.org/?gist=ccf387ed66a0d8b832ed&version=stable
当我们设置z[0]
时,Rust 应该尝试释放它,但由于z[0]
未初始化,程序应该崩溃。然而,它可以正常运行。为什么?
z..set_len
的实现细节导致的。一旦你使用了不安全的语义(在任何语言中),所有的赌注都取消了。如果有的话,当你尝试访问赋值给z[0]
的位置覆盖掉的内容时,它可能会在后面崩溃。 - jpaugh