yon*_*ong 5 segmentation-fault rust
考虑一下这个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]);
}
Run Code Online (Sandbox Code Playgroud)
https://play.rust-lang.org/?gist=ccf387ed66a0d8b832ed&version=stable
Rust应该z[0]在我们设置时尝试删除,并且由于z[0]未初始化它应该使程序崩溃.但它运行正常.为什么?
虽然Vec的堆分配中的内存是未初始化的,但它通常会用零填充,并且归零Vec是一个空的Vec(String并且Vec具有廉价的构造函数,因为它们不会为空数组进行分配).因此没有免费分配,因此在这种特殊情况下它不会崩溃.非常轻微的修改,或者在具有稍微不同的未初始化内存语义的机器上运行它可能很容易导致它崩溃(这将是一件好事 - 崩溃通常比微妙的错误更容易调试).