C-我在这里不断遇到细分错误.在这个工作了4个小时



我确实需要一些帮助

我有这两个结构:

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("%sn", 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);
            }
        }
    }
}

ADDTREENODE函数中的IF块已经进行了测试,但我尚未测试Else Block。无论如何,它永远不会使用,所以我认为这不是问题。

这里的问题是,在该程序甚至达到主机之前,我正在获得细分伪造。当我评论cpynode(cpy,binary_tree.root)时;声明,然后起作用。然后,我继续评论整个CPYNode Funcition减去第一行。我发现第一行给我一个细分故障,我不知道为什么。一些帮助将不胜感激。

您可能还有其他错误,但是这些问题需要解决:

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的地址传递给该功能。

相关内容

  • 没有找到相关文章

最新更新