Процедура случайного дерева в 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;

Что я пропустил в этом задании?

0 ответов

Другие вопросы по тегам