在下面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;
}
}
如果列表为空,则bstcreate()
将root
设置为新的Node
,然后由于没有其他事情可做,因此期望立即退出。
t
初始化为root
,r
初始化为NULL
。如果删除return
语句,并且输入时root
为NULL
,则t
最初为NULL
,导致跳过while
循环,然后在访问r
成员时发生崩溃],因为r
仍为NULL
,因为循环没有将r
分配为指向任何地方。