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: 感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。
感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。
-- 👇 uno: 直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1
目前的drop 是由compiler 实现?
直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1
运行一下看看: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2c2111259ea19869854105300a7ce875
要用 Box::leak 才会泄露,你这个写法并没有把 box 所有权交出去
Box::leak
不过Box::new(20) 分配的内存已经没有指针指向,岂不是无法回收了?
-- 👇 chirsz-ever: 不会泄漏。在 Rust 里除非主动,不然很难泄漏。
不会泄漏。在 Rust 里除非主动,不然很难泄漏。
评论区
写评论多谢大神指点
--
👇
uno: 还是直接发链接给你看吧。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b7e84c9468ce5990c5ff4f4d9ba3cfcc
👇
ffffsfs: 感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。
还是直接发链接给你看吧。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b7e84c9468ce5990c5ff4f4d9ba3cfcc
👇
ffffsfs: 感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。
感谢回复。执行了@uno的代码,发现16行打印的居然是drop 2而不是drop 1,而drop 1居然是最后打印的,望大神能够不吝赐教。
--
👇
uno: 直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1
目前的drop 是由compiler 实现?
直接写一个自定义数据,实现drop,看有没有drop就行了呗。 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f0a4000c3da7997c3c8a918c0337a7b1
运行一下看看: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2c2111259ea19869854105300a7ce875
要用
Box::leak
才会泄露,你这个写法并没有把 box 所有权交出去不过Box::new(20) 分配的内存已经没有指针指向,岂不是无法回收了?
--
👇
chirsz-ever: 不会泄漏。在 Rust 里除非主动,不然很难泄漏。
不会泄漏。在 Rust 里除非主动,不然很难泄漏。