After free(p) the pointer still holds the old address, and reading it may even appear to work. In Rust the ownership and borrow rules turn the same mistake into a compile error.