У меня есть выражение 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 / else if.
Есть ли способ, которым я могу достичь решения обеих проблем?
Я предполагаю, что проблема в том, что left
и / или right
НЕДЕЙСТВИТЕЛЕН, следовательно, ваш segfault?
Если так, то используйте 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_red
а также myNode->right->is_red
все еще в if
условия, если myNode->left
является NULL
(или же myNode->right
соответственно), они не будут оцениваться, и у вас не будет вашего сегфо.
Проверьте, не являются ли указатели ненулевыми в операторе if:
if(myNode != NULL && myNode->left != NULL && myNode->left->is_red){
{
// code goes here
}