我在这里确实需要一些帮助,因为我已经尝试了数小时的解决方案,并且没有任何效果。

我有以下两个结构:

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);
            }
        }
    }
}


addTreeNode函数中的if块已经过测试,但是我尚未测试else块。无论如何,它从未使用过,所以我认为这不是问题。

这里的问题是,在程序甚至到达主程序之前,我就已经遇到了分段故障。当我注释掉cpyNode(cpy,binary_tree.root);声明,那么它起作用。然后,我继续注释掉整个cpyNode功能,减去第一行。我发现第一行给了我一个细分错误,我不知道为什么。一些帮助将不胜感激。

最佳答案

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

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

10-04 13:08