From 23643b138a91967d4e339e324fa0baf541602b09 Mon Sep 17 00:00:00 2001 From: Jesse <35264598+JesseAtSZ@users.noreply.github.com> Date: Tue, 11 Jan 2022 10:46:37 +0800 Subject: [PATCH] Update ownership.md --- book/contents/basic/ownership/ownership.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/contents/basic/ownership/ownership.md b/book/contents/basic/ownership/ownership.md index 7002dbe5..6655a0fc 100644 --- a/book/contents/basic/ownership/ownership.md +++ b/book/contents/basic/ownership/ownership.md @@ -21,11 +21,11 @@ int* foo() { } // 变量a和c的作用域结束 ``` -这段代码虽然可以编译通过,但是其实非常糟糕,变量`a`和`c`都是局部变量,函数结束后将局部变量`a`的地址返回,但局部变量`a`存在栈中,在离开作用域后,`a`所申请的栈上内存都会被系统回收,从而造成了`悬空指针(Dangling Pointer)`的问题。这是一个非常典型的内存安全问题, 很多编程语言都存在。 +这段代码虽然可以编译通过,但是其实非常糟糕,变量`a`和`c`都是局部变量,函数结束后将局部变量`a`的地址返回,但局部变量`a`存在栈中,在离开作用域后,`a`所申请的栈上内存都会被系统回收,从而造成了`悬空指针(Dangling Pointer)`的问题。这是一个非常典型的内存安全问题,虽然编译可以通过,但是运行的时候会出现错误, 很多编程语言都存在。 再来看变量`c`,`c`的值是常量字符串,存储于常量区,可能这个函数我们只调用了一次,也可能我们不再会使用这个字符串,但`xyz`只有当整个程序结束后系统才能回收这片内存。 -所以内存安全问题,一直都是程序员非常头疼的问题,好在, 在Rust中这些问题即将成为历史,那Rust如何做到这一点呢? +所以内存安全问题,一直都是程序员非常头疼的问题,好在, 在Rust中这些问题即将成为历史,因为Rust在编译的时候就可以帮助我们发现内存不安全的问题,那Rust如何做到这一点呢? 在正式进入主题前,先来一个预热知识。