Я продолжаю получать ошибку сегментации здесь.Был на этом 4 часа - PullRequest
0 голосов
/ 27 февраля 2019

Мне действительно нужна помощь, потому что я пытался найти решение этой проблемы часами, но ничего не получается.

У меня есть две структуры:

typedef struct NODE {
    char* line;
    int count;
    struct NODE *left, *right;
} NODE;

typedef struct BST {
    NODE *root;
} BST;

И эти строкикода, который кажется подозрительным:

if (iflag == 0) {
    char curr_string[300];
    BST binary_tree;

    //fpointer_in = fopen(filename_in, "r");

    //while (!feof(fpointer_in)) {

        //fgets(curr_string, 300, fpointer_in);
        addTreeNode("Hello There!", binary_tree.root); // Adds the node to the binary tree.

    //}
    NODE *cpy = malloc(sizeof(NODE));
    cpy->line = calloc(25, sizeof(char));

    cpy->count = 0;
    cpyNode(cpy, binary_tree.root);

    free(cpy);
    free(binary_tree.root);
    //printf("%s\n", cpy->line);
    //free(binary_tree.root);
    //fclose(fpointer_in);
}

Это функция addTreeNode:

void addTreeNode(char* line_string, NODE* root) {

    if (root == NULL) {
        root = calloc(25, sizeof(char)); // 25 is a test var.
        root->line = calloc(25, sizeof(char)); // 25 is a test variable.
        strcpy(root->line, line_string);
        root->count = 0;    
    }
    else {
        NODE *add_node = malloc(sizeof(NODE));
        add_node->line = calloc(25, sizeof(char)); // 25 is a test variable.
        strcpy(add_node->line, line_string);

        while (root != NULL) {
            if (strcmp(line_string, root->line) < 0 && root->left == NULL) {
                //cpyNode(node_ptr->left, add_node);
            }
        }
    }
}

Блок if в функции addTreeNode был протестирован, но мне еще предстоит протестировать блок else.Несмотря на это, он никогда не используется, поэтому я не думаю, что это проблема.

Проблема здесь в том, что я получаю ошибку сегментации ДО того, как программа даже достигнет main.Когда я закомментирую cpyNode (cpy, binary_tree.root);Скажите, тогда это работает.Затем я продолжил закомментировать всю функцию cpyNode без первой строки.Я понял, что первая строка дает мне ошибку сегментации, и я не могу понять, почему.Некоторая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 февраля 2019

У вас могут быть другие ошибки, но вам нужно решить следующие проблемы:

if(iflag == 0){
    char curr_string[300];
    BST binary_tree;

Здесь binary_tree неинициализирован.

        addTreeNode("Hello There!", binary_tree.root);
        //Adds the node to the binary tree.

Вы ожидаете, что этот вызов добавитузел к дереву, но вы передаете неинициализированный элемент root по значению, поэтому после возврата из функции указатель сохранит свое неинициализированное состояние.

Вам следует изменить функцию addTreeNode напринять указатель на BST и передать адрес binary_tree функции.

...