从排序文件构建二叉搜索树会产生分段错误

时间:2014-12-07 05:10:22

标签: c binary-tree

我正在尝试从文件中的已排序数字创建二叉搜索树,但在创建之后,如果我尝试对树执行任何操作会导致分段错误。

typedef struct node_ {
    int data;
    struct node_ *left;
    struct node_ *right;
} node;

int main(int argc,char* argv[]) {
    //input error check
    if (argc != 2) {
        printf("Usage: %s <input file>\n", argv[0]);
        return 0;
    }

    //opening file
    FILE* file = fopen(argv[1], "r");

    if (file == NULL) {
        puts("error opening file");
        return 0;
    }

    int temp = 0, num = 0, size = 0, i = 0;

    //parsing through file to calculate size
    while (!feof(file)) {
        fscanf(file,"%d", &temp);
        size++;
    }
    //going back to beginning of file
    rewind(file);

    //create array and scan numbers from file into array
    int *array = malloc(size*sizeof(int));
    for (i = 0; i < size; i++) {
        fscanf(file,"%d", &array[i]);
    }   
    fclose(file);

    //checking array
    for (i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }

    puts("");
    //builds the balanced array
    node* tree = build_balanced_tree(array, 0, size-1);

    print(tree);
}


node* build_balanced_tree(int a[], int low, int high) {
    //Base Case
    if (low > high)
        return NULL;

    int mid = (high+low)/2;
    node* root = malloc(sizeof(root));

    root->data = a[mid];
    root->left = build_balanced_tree(a, low, mid - 1);
    root->right = build_balanced_tree(a, mid + 1, high);

    return root;
}

程序在打印(树)时出现故障,但我知道这个功能正常。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

变化:

node* root = malloc(sizeof(root));

为:

node* root = malloc(sizeof(*root));

您目前正在做的是为结构分配指针的大小。