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