Merge pull request #158 from JesseAtSZ/patch-2

Update ownership.md
pull/159/head
Sunface 3 years ago committed by GitHub
commit 8633702932
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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如何做到这一点呢
在正式进入主题前,先来一个预热知识。

Loading…
Cancel
Save