Процедура случайного дерева в ANSI-C - что генерирует SIGSEGV?
В 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;
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;
}
}
}
генерирует ошибку нарушения памяти в цикле WHILE в строке ниже:
иначе x = p->right;
Что я пропустил в этом задании?