解决编译器错误:指针可能未初始化

时间:2013-05-21 09:35:33

标签: c++ if-statement

我需要解决编译器正在接收的错误 - 我理解为什么它会接收到该错误但需要解决它,因为函数(抛出错误)只会在指针为<时执行/ i>已初始化。

这是我的伪代码:

if (incoming_message_exists) 
{
    msg_class* current_msg;

    /*current_msg will become either value_1 or value_2*/

    /*code block 1*/
    if (condition_is_fulfilled)
    {
        current_msg = value_1;
    }

    /*code block 2*/
    else 
    {
        current_msg = value_2;
    }

    /*code block 3*/
    /*bool function performed on current_msg that is throwing error*/
    if (function(current_msg))
    {
        //carry out function 
    }
}

我宁愿不在1和2内执行代码块3,但如果这是唯一的解决方案,那么我会。提前谢谢!

1 个答案:

答案 0 :(得分:5)

您向我们展示的ifelse分支来自两个不同的if陈述吗?

如果是,您当前的代码能够保留current_msg未初始化。当您到达function(current_msg)时,这可能会崩溃。

如果你为同一个if语句向我们展示了两个分支,那么你的编译器就错了 - current_msg没有被初始化的危险。您可能仍需要更改代码以禁止警告,例如,如果您将警告构建为错误。

您可以通过在声明

时初始化current_msg来修复/取消警告
msg_class* current_msg = NULL;

如果在任一分支中都没有其他代码,您也可以使用三元运算符

进行初始化
msg_class* current_msg = condition_is_fulfilled? value_1 : value_2;

如果警告是真的,你还必须检查function是否应该通过NULL论证或防范此

if (current_msg != NULL && function(current_msg))