Unsafe Basics
7 examples - 5 basic, 2 intermediate - for unsafe keyword scope.
Search across all documentation pages
7 examples - 5 basic, 2 intermediate - for unsafe keyword scope.
unsafe Blockfn main() {
let v = 42;
let p = &v as *const i32;
let val = unsafe { *p };
println!("{val}");
}unsafeunsafe fnunsafe fn dangerous() {
// caller must uphold invariants
}Calling dangerous() requires unsafe { dangerous(); }.
unsafe traitunsafe trait Trusted {}Implementer promises safety conditions.
unsafe fnstatic mutunsafe traitunion field accessBorrow checker still applies to safe code.
Related: Undefined Behavior
fn split_at_mut<T>(slice: &mut [T], mid: usize) -> (&mut [T], &mut [T]) {
slice.split_at_mut(mid)
}Std uses unsafe inside - safe API.
/// # Safety
/// `ptr` must be valid for reads of one `i32`.
unsafe fn read_int(ptr: *const i32) -> i32 {
*ptr
}Related: Unsafe Rust Best Practices
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Reviewed by Chris St. John·Last updated Jul 16, 2026