Rust's borrow checker isn't the issue with this example. Consider:
    
    
    fn force_realloc(vec: &mut Vec<i32>) -> i32 {
        for i in 0 .. 100_000_000 {
            vec.push(i);
        }
        return 1234;
    }
    fn main() {
        let mut vec = Vec::new();
        vec.push(0);
        println!("{:?}", unsafe { std::mem::transmute::<&i32, usize>(&vec[0]) 
});
        vec[0] = force_realloc(&mut vec);
        println!("{:?}", unsafe { std::mem::transmute::<&i32, usize>(&vec[0]) 
});
        println!("{:?}", vec[0]);
        println!("{:?}", vec.len())
    }
    
    
    Run

`vec[0]`'s address changes. Rust just doesn't consider it until after the 
function returns.

Reply via email to