es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar la función std::mem::uninitialized para crear un valor no inicializado para timer1 y luego pasar su dirección a timer_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.

Comments are closed.