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语句的能力.
有什么方法可以解决这两个问题吗?
检查if语句中的指针是否为空:
if(myNode != NULL && myNode->left != NULL && myNode->left->is_red){
{
// code goes here
}
Run Code Online (Sandbox Code Playgroud)
我假设问题是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_red
和myNode->right->is_red
仍然处于if
条件中,但 ifmyNode->left
是NULL
(或myNode->right
分别),它们不会被评估,并且您不会出现段错误。