rust中move后,还能访问到原来的值不及在rust中实现对内存重复释放

use std::ptr;
use std::slice;
fn main() {
    let mut rust = "rust".to_string();
    let ptr = &rust as *const String as usize;//还指向堆中的u8序列
    println!("rust is  {:p}", &rust);
    println(ptr);
    let java = rust;//move后
    println!("java is {:p}", &java);
    // drop(java);//可以提前释放,结果发现是二次释放u8序列,报错了
    rust = "new".to_string();
    println!("rust is {:p},value is {}", &rust,rust);
    println(ptr);
}//最后清理,二次释放u8序列,报错了

fn println(ptr: usize) {
    unsafe {
        let ptr = ptr as *const String;
        let mut s2 = ptr::read(ptr);
        println!("{}", s2);
    }//释放了指向堆u8序列
}

Rust Playground

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值