On 26/11/14 12:26 PM, grayfox wrote:
> Hey guys,
> 
> I'm really new to Rust (actually I've looked on Rust the last 5 hours the 
> first time) but I think I produced something that shouldn't be possible. From 
> the pointer guide I know that the following code will not compile because in 
> the end I would have two mutable pointers to the same address:
> 
> let x = 5i;
> let y = &x;
> let z = &x;
> 
> But in the following snippet I end up with two mutable pointer tmp and *i 
> which point both to the same address:
> 
> fn bar<'a>(i: &mut &'a int) {
>     let mut tmp = *i;
>     println!("{} {}", *tmp, **i);
> }
> 
> fn foo<'a>() {
>     let mut i: &int = &mut 5;
>     bar(&mut i);
> }
> 
> fn main() {
>     foo();
> }
> 
> Maybe I don't understand the concept of the Rust memory concept enough but if 
> I understand everything correct so far this shouldn't compile but it does 
> actually.
> 
> Kind regards,
> 
> grayfox

I see two immutable refs being created from a mutable one, not two
aliasing mutable refs. The type of `tmp` is `&int`, not `&mut int`. The
fact that the variable is mutable just means that another immutable
pointer can be assigned to it - it's unnecessary, as is the `mut` on `i`
in `foo`.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to