2

次のようなif/elseifステートメントがあります。

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

私がチェックしている条件は、各ノードの特定のデータフィールドが設定されているかどうかです。しかし、問題は、NULLポインターにアクセスし、そのメンバー(存在しない)にアクセスしようとすると、セグメンテーション違反の問題が発生することです。しかし、ifの前にifステートメントを実行し、else ifの前に再度実行して、ノードがNULLであるかどうかを確認すると、if /elseifステートメントを使用できなくなります。

両方の問題の解決策を達成する方法はありますか?

4

2 に答える 2

5

ifステートメントでポインターがnullでないかどうかを確認します。

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

left問題はそれおよび/またはNULLであると想定している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->leftNULL(またはmyNode->rightそれぞれ)の場合、それらは評価されず、セグメンテーション違反は発生しません。

于 2012-12-14T01:58:42.813 に答える