2

我有一个 if/else if 语句,如下所示:

if(myNode->left->is_red){
    //CODE TO EXECUTE
}               
else if(myNode->right->is_red){
    //CODE TO EXECUTE
}

我正在检查的条件是是否设置了每个节点中的某些数据字段。但是,问题是,如果我访问 NULL 指针并尝试访问其成员(不存在),那么我会遇到分段错误问题。但是,如果我在 if 之前执行 if 语句,并在 else if 之前再次执行以检查节点是否为 NULL,那么我将失去使用 if/else if 语句的能力。

有什么办法可以解决这两个问题?

4

2 回答 2

5

检查 if 语句中的指针是否不为空:

if(myNode != NULL && myNode->left != NULL && myNode->left->is_red){
{ 
   // code goes here
}
于 2012-12-14T01:58:13.440 回答
3

我假设问题是left和/或right为NULL,因此您的段错误?

如果是这样,则使用 AND。

例如:

if((myNode->left != NULL) && myNode->left->is_red){
    //CODE TO EXECUTE
}               
else if((myNode->right != NULL) && myNode->right->is_red){
    //CODE TO EXECUTE
}

这使用短路评估:虽然myNode->left->is_redandmyNode->right->is_red仍然在if条件中,但如果myNode->leftNULL(或myNode->right分别),它们将不会被评估并且你不会有你的段错误。

于 2012-12-14T01:58:42.813 回答