我无法理解Rust保护此程序的原因:
fn foo() -> &i32 {
let x: i32 = 0;
&x
}
fn main () {
let p = foo();
*p = 42 ; // attempt to store 42 at address p => error!
}
为什么会出现错误?我知道是局部变量lifetime导致的,但我不明白的是,它是为了防止什么常见的漏洞?
Rust采用的这个系统是为了防止释放后使用吗?这个程序的C等价物是如何脆弱的?
1条答案
按热度按时间fkaflof61#
在您的示例中,
x
在函数foo
的末尾被丢弃(https://doc.rust-lang.org/std/ops/trait.Drop.html)。这可以防止您将值指派给不再指向有效内存位置的指涉。