From fa6b5f9897b2805a267b7f0f336ff39550506ee4 Mon Sep 17 00:00:00 2001 From: Adrian Rebola-Pardo <adrian.rebola@tuwien.ac.at> Date: Mon, 24 Mar 2025 12:01:18 +0100 Subject: [PATCH] added pointer dereference example --- ptr-deref/Cargo.toml | 6 ++++++ ptr-deref/src/main.rs | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 ptr-deref/Cargo.toml create mode 100644 ptr-deref/src/main.rs diff --git a/ptr-deref/Cargo.toml b/ptr-deref/Cargo.toml new file mode 100644 index 0000000..6461c78 --- /dev/null +++ b/ptr-deref/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "ptr-deref" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/ptr-deref/src/main.rs b/ptr-deref/src/main.rs new file mode 100644 index 0000000..2a1dae2 --- /dev/null +++ b/ptr-deref/src/main.rs @@ -0,0 +1,20 @@ +fn main() { + // First create a `Vec` + let mut vec = Vec::from([100, 101, 102]); + + // Let's take a raw pointer to the first item + let ptr0 = &raw mut vec[0]; + + // Also a raw pointer to the second item + let ptr1 = unsafe { ptr0.add(1) }; + + // Here I am implicitly taking a mutable reference to `vec` + vec[0] = 300; + + // Unsafe but valid: no other reference at this point refers to + // memory overlapping *ptr1. + unsafe { *ptr1 = 301 }; + + // Valid: there is no mutable reference to memory owned by `vec`. + println!("OUTPUT: {:?}", &vec) +} \ No newline at end of file -- GitLab