Функция null_mut
Функция null_mut создает нулевой изменяемый указатель
(*mut T) для указанного типа. Она возвращает
указатель, который не указывает на какой-либо допустимый
адрес в памяти. Параметром функция принимает тип указателя,
который нужно создать. Функция является безопасной для вызова,
однако разыменование полученного указателя требует
unsafe-блока, так как обращение к нулевому указателю
приводит к неопределенному поведению.
Синтаксис
std::ptr::null_mut::<T>()
Пример
Давайте создадим нулевой изменяемый указатель на тип i32
и проверим, является ли он нулевым:
fn main()
{
let ptr: *mut i32 = std::ptr::null_mut();
println!("{:?}", ptr.is_null());
}
Результат выполнения кода:
true
Пример
Давайте сравним нулевой указатель, созданный через
null_mut, с указателем, полученным из изменяемой
переменной:
fn main()
{
let mut value = 42;
let ptr1: *mut i32 = std::ptr::null_mut();
let ptr2: *mut i32 = &mut value;
println!("{:?}", ptr1.is_null());
println!("{:?}", ptr2.is_null());
}
Результат выполнения кода:
true
false
Пример
Давайте создадим нулевой указатель и убедимся, что его нельзя безопасно разыменовать без проверки:
fn main()
{
let ptr: *mut i32 = std::ptr::null_mut();
if !ptr.is_null()
{
unsafe
{
println!("{}", *ptr);
}
}
else
{
println!("Pointer is null");
}
}
Результат выполнения кода:
"Pointer is null"
Смотрите также
-
функция
null,
которая создает нулевой неизменяемый указатель -
тип
mut-pointer,
который представляет изменяемый сырой указатель -
тип
const-pointer,
который представляет неизменяемый сырой указатель -
ключевое слово
unsafe,
которое позволяет выполнять небезопасные операции