gpt4 book ai didi

rust - 如何在Unsafe Rust中传递未初始化的变量地址

转载 作者:行者123 更新时间:2023-12-03 11:36:29 27 4
gpt4 key购买 nike

以下代码引发错误
可能未初始化的变量的借用:ires

pub fn new(t: QueryType) -> QueryObject
{
unsafe {
let mut ires: u32;
gl::GenQueries(1, &mut ires as *mut u32);

let res = QueryObject {
index: ires,
qtype: t as u32,
status: QueryStatus::Inactive as u32,
};

return res;
}
}
如何在不初始化变量 ires的情况下传递变量地址

最佳答案

您可以使用 MaybeUninit 告诉编译器值的位模式可能不是有效的位模式。

let ires = std::mem::MaybeUninit::uninit();
gl::GenQueries(1, ires.as_mut_ptr());
let ires = unsafe { ires.assume_init() };
通过使用 assume_init,您可以告诉编译器您已经检查 ires是有效的初始化值。否则,可能会发生未定义的行为。在这种情况下,如果您确定 gl::GenQueries将不会尝试读取此值的100%,则为它提供未初始化的内存应该没问题。我说“应该”是因为未初始化的整数是否为有效整数是 still a debate
小心未初始化的内存。如果您想玩它,建议您查看 blog post

关于rust - 如何在Unsafe Rust中传递未初始化的变量地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65614418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com