если утверждение и ошибка сегментации

У меня есть выражение 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.

Есть ли способ, которым я могу достичь решения обеих проблем?

2

Решение

Я предполагаю, что проблема в том, что 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 соответственно), они не будут оцениваться, и у вас не будет вашего сегфо.

3

Другие решения

Проверьте, не являются ли указатели ненулевыми в операторе if:

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

По вопросам рекламы [email protected]