< 返回版块

ffffsfs 发表于 2020-12-24 22:56

fn main() { let mut ptr_y:*const i32 = &*Box::new(20); ptr_y = &0x5; println!("{:?}", ptr_y); }

rust小白一名,想咨询下大神们,以上程序是不是会造成内存泄露? 编译的时候虽然有warning,但是能通过。

评论区

写评论
作者 ffffsfs 2020-12-27 23:09

多谢大神指点

--
👇
uno: 还是直接发链接给你看吧。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b7e84c9468ce5990c5ff4f4d9ba3cfcc

👇
ffffsfs: 感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。

uno 2020-12-27 17:39

还是直接发链接给你看吧。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b7e84c9468ce5990c5ff4f4d9ba3cfcc

👇
ffffsfs: 感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。

作者 ffffsfs 2020-12-27 16:44

感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。

--
👇
uno: 直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1

gotope 2020-12-25 12:07

目前的drop 是由compiler 实现?

uno 2020-12-25 09:24

直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1

lygz5016 2020-12-24 23:58

运行一下看看: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2c2111259ea19869854105300a7ce875

gwy15 2020-12-24 23:43

要用 Box::leak 才会泄露,你这个写法并没有把 box 所有权交出去

作者 ffffsfs 2020-12-24 23:22

不过Box::new(20) 分配的内存已经没有指针指向,岂不是无法回收了?

--
👇
chirsz-ever: 不会泄漏。在 Rust 里除非主动,不然很难泄漏。

chirsz-ever 2020-12-24 23:17

不会泄漏。在 Rust 里除非主动,不然很难泄漏。

1 共 9 条评论, 1 页