Fix typo in ownership/ownership.md

pull/387/head
zongzi531 3 years ago
parent 751574adc7
commit 4d02423b57

@ -157,7 +157,7 @@ let s2 = s1;
好吧,就假定一个值可以拥有两个所有者,会发生什么呢?
当变量离开作用域后Rust 会自动调用 `drop` 函数并清理变量的堆内存。不过由于两个 `String` 变量指向了同一位置。这就有了一个问题:当 `s1``s2` 离开作用域,它们都会尝试释放相同的内存。这是一个叫做**二次释放double free**的错误,也是之前提到过的内存安全性 BUG 之一。两次释放(相同)内存会导致内存污染,它可能会导致潜在的安全漏洞。
当变量离开作用域后Rust 会自动调用 `drop` 函数并清理变量的堆内存。不过由于两个 `String` 变量指向了同一位置。这就有了一个问题:当 `s1``s2` 离开作用域,它们都会尝试释放相同的内存。这是一个叫做 **二次释放double free** 的错误,也是之前提到过的内存安全性 BUG 之一。两次释放(相同)内存会导致内存污染,它可能会导致潜在的安全漏洞。
因此Rust 这样解决问题:**当 `s1` 赋予 `s2`Rust 认为 `s1` 不再有效,因此也无需在 `s1` 离开作用域后 `drop` 任何东西,这就是把所有权从 `s1` 转移给了 `s2``s1` 在被赋予 `s2` 后就马上失效了**。

Loading…
Cancel
Save