在显式初始化结构成员时获取“使用可能未初始化的变量”

时间:2019-04-12 21:36:00

标签: rust

这是我遇到的错误:

error[E0381]: use of possibly uninitialized variable: `mbinfo.flags`
   --> kernel/src/loader/mod.rs:256:20
    |
256 |     mbinfo.flags = mbinfo.flags | multiboot::MULTIBOOT_INFO_CMDLINE;
    |                    ^^^^^^^^^^^^ use of possibly uninitialized `mbinfo.flags`

这是代码:

let mut mbinfo: multiboot::multiboot_info;
mbinfo.flags = 0 as u32;
mbinfo.flags = mbinfo.flags | multiboot::MULTIBOOT_INFO_CMDLINE

即使我明确地对其进行了初始化,我仍然收到错误。我尝试使该结构派生Default,但是问题是该结构包含联合,当我尝试派生Default时,我得到

error: this trait cannot be derived for unions 

有没有简单的出路?谢谢。

multiboot模块是由bindgen从头文件自动生成的。

Rust Playground上的MWE,代码位于结尾

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=464b7fb21fc75a54618b14619076d152

1 个答案:

答案 0 :(得分:2)

error[E0381]: assign to part of possibly uninitialized variable: `mbinfo`
    --> src/lib.rs:1178:4
     |
1178 |    mbinfo.flags = 0;
     |    ^^^^^^^^^^^^^^^^ use of possibly uninitialized `mbinfo`

编译器会告诉您确切的问题:您正在尝试使用未初始化的结构。您正在尝试仅初始化结构的一个字段,Rust不允许这样做。

multiboot_info没有实现Default特征,因此您需要弄清楚如何使用其API创建它。