IF 语句和分段错误 - C++

if statement and segmentation fault - c++

本文关键字:C++ 错误 分段 语句 IF      更新时间:2023-10-16

我有一个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 之前再次执行 if 语句以检查节点是否为 NULL,那么我将失去使用 if/else if 语句的能力。

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

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

if(myNode != NULL && myNode->left != NULL && myNode->left->is_red){
{ 
   // code goes here
}

我假设问题是left和/或right是空的,因此你的段错误?

如果是这样,请使用 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_redmyNode->right->is_red仍处于if条件,但如果myNode->left NULL(或分别myNode->right),则不会对其进行评估,并且不会有段错误。