我在这里确实需要一些帮助,因为我已经尝试了数小时的解决方案,并且没有任何效果。
我有以下两个结构:
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
的地址传递给该函数。