Почему я получаю ошибку сегментации для этого фрагмента кода? - PullRequest
0 голосов
/ 16 мая 2019

Я строю дерево с использованием C и получаю ошибку сегментации из моей addNode() функции.

Я подозревал, что это потому, что я присваивал дочернему элементу указатель NULL, но, похоже, это не так.

//This is the tree node struct.
struct NODE {
    int value;
    struct NODE* child_list;
    struct NODE* right_sibling;
    struct NODE* parent;
};


//This function adds a node to an element in the tree with a value equal to parent value.
struct NODE* addNode (struct NODE* existing, int parentVal, int childVal) {
    struct NODE* child = existing;
    struct NODE* child_right = child->right_sibling;

    while (child != NULL) {
        if (child->value == parentVal) {
            struct NODE* new = malloc(sizeof(struct NODE));
            new->value = childVal;
            new->parent = child;
            new->right_sibling = child->child_list;
            child->child_list = new;

            break;
        }
        while (child_right != NULL) {
            if (child_right->value == parentVal) {
                struct NODE* new_sibling = malloc(sizeof(struct NODE));
                new_sibling->value = childVal;
                new_sibling->parent = child_right;
                new_sibling->right_sibling = child->child_list;
                child_right->child_list = new_sibling;
                break;
            }
            child_right = child_right->right_sibling;
        }
        child = child->child_list;
    }


    return existing;
}

//Here is the implementation of the function that I used to test the function.

int main () {

    struct NODE* root = malloc(sizeof(struct NODE));
    root->value = 100;
    root->child_list = NULL;
    root->right_sibling = NULL;
    root->parent = NULL;

    root = addNode(root, 100, 7);
    root = addNode(root, 100, 10);
    root = addNode(root, 100, 15);
    root = addNode(root, 7, 30);
    root = addNode(root, 15, 20);
    root = addNode(root, 15, 37);

    printTree(root);


    return 0;
}

Программа должна напечатать дерево с правильными дочерними элементами, но вместо этого я получаю ошибку сегментации при запуске кода.

1 Ответ

1 голос
/ 16 мая 2019

Так что, очевидно, я не устанавливал свой child_list в NULL в циклах while при создании новых узлов.Спасибо Отставной ниндзя за предложение решения!

...