首页 > 解决方案 > 无法理解此 return 语句的功能,没有它会发生运行时错误

问题描述

在下面if的函数语句bstcreate()中,如果我删除该return语句,则会发生运行时错误。这是为什么?

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;
    }
}

标签: c++cdata-structurestreebinary-search-tree

解决方案


如果列表为空,则bstcreate()设置root为 new Node,然后预计会立即退出,因为没有其他事情可做。该return语句执行该退出。由于该函数被声明为返回void,因此无需为 提供值return

t被初始化为root并被r初始化为NULL。如果您删除该return语句,并且rootNULL进入时,则t最初会NULL导致while循环被跳过,然后在访问成员时发生崩溃,r因为r仍然是NULL因为循环没有分配r指向任何地方。


推荐阅读