Pointers ANSI-C中的随机树程序-什么生成SIGSEGV?
在main.c中,树被声明并启动,但过程:Pointers ANSI-C中的随机树程序-什么生成SIGSEGV?,pointers,data-structures,ansi-c,Pointers,Data Structures,Ansi C,在main.c中,树被声明并启动,但过程: void MakeTree(Tree T, int n) { int i, r; Node *x, *p; time_t t; srand((unsigned) time(&t)); for(i = 0; i < n; i++) { Node * new = malloc(sizeof(Node)); new->key = rand() % 100;
void MakeTree(Tree T, int n)
{
int i, r;
Node *x, *p;
time_t t;
srand((unsigned) time(&t));
for(i = 0; i < n; i++)
{
Node * new = malloc(sizeof(Node));
new->key = rand() % 100;
x = T.root;
NodeInit(p);
while(x != NULL)
{
p = x;
r = rand() % 2;
if(r == 0) x = p->left;
else x = p->right;
}
new->parent = p;
if (T.root == NULL)
T.root = new;
else
if (r == 0)
{
p->left = new;
}
else
{
p->right = new;
}
}
}
void生成树(树T,int n)
{
int i,r;
节点*x,*p;
时间;
srand((未签名)时间(&t));
对于(i=0;i键=rand()%100;
x=T.根;
NodeInit(p);
while(x!=NULL)
{
p=x;
r=rand()%2;
如果(r==0)x=p->left;
否则x=p->right;
}
新建->父级=p;
if(T.root==NULL)
T.根=新的;
其他的
如果(r==0)
{
p->左=新;
}
其他的
{
p->right=新建;
}
}
}
在以下行的WHILE循环中生成内存冲突错误:
否则x=p->right
<>我在这项工作中错过了什么?使用<代码>新< /C>作为一个变量名称对我们可怜的C++程序员来说是一件微不足道的事情。@ Bathsheba,但它是ANSI C,所以他很好地在他的权限之内,这不是一件不寻常的事情。在你的最终的<代码>()(<)>代码>语句中有一个明显的错误,但是我敦促你自己去发现它。我还敦促您在调试器中单步执行程序,自己查找问题。此外,如果您总是在属于
if
语句等的块周围放置{}
和相应的换行符,您将为自己节省很多麻烦。@slim-aww,我看到了它-编辑。我在发布之前使用了调试器,发现这个部分生成SIGSEGV:x=p->left;(或x=p->右侧;由于r随机变量)。我不明白这个指针怎么了。