【发布时间】:2021-08-18 18:36:22
【问题描述】:
fn dangle() -> &String { // dangle returns a reference to a String
let s = String::from("hello"); // s is a new String
&s // we return a reference to the String, s
}
翻阅 rust book 并了解所有权,返回对 String 的引用如何使其成为悬空指针?
【问题讨论】:
-
此代码无法编译,因为局部变量 s 在作用域(即函数)结束时会自动删除,因此您无法指向它。
-
“悬空指针”或“悬空引用”是一种编程习惯用法,表示对已释放数据的引用。由于
s有一个明确定义的范围,该范围以函数的结尾结束,所以它的数据将在函数返回时被释放。这就是为什么从函数返回时对字符串(或字符串内的数据)的引用会“悬空”。 -
另外,您的问题有一个“内存泄漏”标签。悬空引用是内存泄漏的inverse,它是一个use-after-free。换句话说,对于悬空引用,数据被释放得太早,而不是太晚。
标签: pointers rust memory-leaks