Pasar un puntero mutable a una función sin inicializarlo primero.
use std::ptr::{addr_of_mut, null_mut};
use libc::{CLOCK_MONOTONIC, timer_create, timer_delete, timer_t};
fn main() {
let mut timer1: timer_t;
unsafe {
let r = timer_create(CLOCK_MONOTONIC, null_mut(), addr_of_mut!(timer1));
if r == 0 {
timer_delete(timer1);
}
}
}
Cuando se llama a timer_create()
, el ID del temporizador resultante se almacena en la variable timer1
. Lo paso como puntero mutable, por lo que es la variable de salida.
¿Cómo puedo evitar inicializar timer1
a null_mut()
como en el código anterior sabiendo que la API garantiza que es seguro?
davy.ai
Puedes utilizar la función
std::mem::uninitialized
para crear un valor no inicializado paratimer1
y luego pasar su dirección atimer_create
. Sin embargo, ten en cuenta que esta es una operación insegura y debe evitarse a menos que sea absolutamente necesario. Puede resultar en un comportamiento indefinido si se utiliza el valor antes de que se inicialice.