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

时间:2012-12-14 01:55:53

标签: c++ if-statement segmentation-fault treenode

我有一个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语句的能力。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

如果是,请使用AND。

e.g:

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

这使用short-circuit evaluation:虽然myNode->left->is_redmyNode->right->is_red仍处于if条件,但如果myNode->leftNULL(或{分别为{1}},它们不会被评估,你也不会有你的段错误。