Не в состоянии понять функцию этого оператора возврата, без него происходит ошибка времени выполнения - PullRequest
0 голосов
/ 22 февраля 2020

В операторе if функции bstcreate(), приведенной ниже, при удалении оператора return возникает ошибка времени выполнения. Почему это так?

Не должен ли процесс go к оператору while даже без оператора return, потому что все операторы были бы выполнены?

Вот код ниже:

struct Node{
    struct Node *lchild;
    int data;
    struct Node *rchild;

}*root=NULL;

void bstcreate(int key)
{
    struct Node*t=root;
    struct Node*p,*r=NULL;
    if(root == NULL)
    {
        p = (struct Node*)malloc(sizeof(struct Node));
        p->data = key;
        p->lchild = p->rchild = NULL;
        root = p;
        return;
    }

    while(t)
    {
        r=t;
        if(key<t->data)
        {
            t=t->lchild;
        }
        else
        {
            t=t->rchild;
        }
    }
    p = (struct Node*)malloc(sizeof(struct Node));
    p->data = key;
    p->lchild = p->rchild = NULL;

    if(r->data>key)
    {
        r->lchild=p;
    }
    else
    {
        r->rchild=p;
    }
}

1 Ответ

2 голосов
/ 22 февраля 2020

Если список пуст, bstcreate() устанавливает root на новый Node, а затем ожидается немедленное завершение, поскольку больше ничего не нужно делать. Оператор return выполняет этот выход. Поскольку функция объявлена ​​как возвращающая void, нет необходимости указывать значение для return.

t инициализируется в root, а r инициализируется в NULL. Если вы удалите оператор return, и root будет NULL при входе, тогда t будет изначально NULL, что приведет к пропуску while l oop, а затем произойдет cra sh при доступе к элементам r, поскольку r по-прежнему NULL, поскольку l oop не назначил r для указания где-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...