0

我需要解决编译器发现的错误 - 我理解为什么它会发现该错误但需要解决它,因为函数(抛出错误)只会在指针初始化时执行。

这是我的伪代码:

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,但如果这是唯一的解决方案,那么我会的。提前致谢!

4

1 回答 1

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))
于 2013-05-21T09:36:55.047 回答