if语句和分段错误 - c ++

jor*_*dan 2 c++ if-statement treenode segmentation-fault

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

if(myNode->left->is_red){
    //CODE TO EXECUTE
}               
else if(myNode->right->is_red){
    //CODE TO EXECUTE
}
Run Code Online (Sandbox Code Playgroud)

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

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

rya*_*ork 5

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

if(myNode != NULL && myNode->left != NULL && myNode->left->is_red){
{ 
   // code goes here
}
Run Code Online (Sandbox Code Playgroud)


Mac*_*Mac 5

我假设问题是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
}
Run Code Online (Sandbox Code Playgroud)

这使用短路评估:尽管myNode->left->is_redmyNode->right->is_red仍然处于if条件中,但 ifmyNode->leftNULL(或myNode->right分别),它们不会被评估,并且您不会出现段错误。