use std::mem::MaybeUninit;
#[allow(
dead_code,
reason = "memory field is used for demonstration but not accessed"
)]
struct HalfFull {
value: usize,
memory: [MaybeUninit<u8>; 16],
}
fn main() {
println!("This example verifies that we can initialize only part of a struct");
let mut uninit1: MaybeUninit<HalfFull> = MaybeUninit::uninit();
uninit1.write(HalfFull {
value: 42,
memory: [MaybeUninit::uninit(); 16], });
let initialized1 = unsafe { uninit1.assume_init() };
println!(
"Method 1 (full struct write): value = {}",
initialized1.value
);
let mut uninit2: MaybeUninit<HalfFull> = MaybeUninit::uninit();
let ptr = uninit2.as_mut_ptr();
let value_ptr = unsafe { &raw mut (*ptr).value };
unsafe {
value_ptr.write(42);
}
let initialized2 = unsafe { uninit2.assume_init() };
println!("Method 2 (field-by-field): value = {}", initialized2.value);
println!("Both methods work, but Method 2 truly leaves memory field uninitialized");
}