問題一覧に戻る
上級システムプログラミング
問題104: unsafe基礎
unsafeは厳密に必要な場合のみ使用する強力な機能です。生ポインタ(*const T、*mut T)は借用チェッカーを迂回し、nullや無効なメモリを指す可能性があります。unsafeブロック内でのみデリファレンス可能。安全性の保証は開発者の責任となり、メモリ安全性、データ競合の防止、有効なポインタの保証が必要です。システムプログラミングやFFIで使用されますが、可能な限り安全な抽象化でラップすべきです。
fn main() {
let mut num = 5;
// 生ポインタの作成
let r1 = &num as *const i32;
let r2 = &mut num as i32;
unsafe {
// デリファレンス
println!("r1: {}", );
// 値の変更
= 10;
}
// 生ポインタからスライス作成
let arr = [1, 2, 3, 4, 5];
let ptr = arr.as_ptr();
let slice = unsafe {
std::slice::from_raw_parts(, 3)
};
println!("slice: {:?}", slice);
}