我确实需要一些帮助
我有这两个结构:
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
的地址传递给该功能。