[英]Binary Search Tree C
我在C中的二进制搜索树中插入有问题。我有二叉树的以下定义(请忽略行号):
struct WordBT {
char *term;
struct WordBT *right;
struct WordBT *left;
};
typedef struct WordBT* WordPtrBT;
WordPtrBT mainListBT;
我的插入功能:
int addlistBT(char *term, char *file, WordPtrBT curr) {
if (curr == NULL) {
WordPtrBT temp = (WordPtrBT)malloc(sizeof(WordPtrBT));
temp->term = term;
curr = temp;
return 1;
}
int test = //some test;
if (test == 0) {
return 0;
}
if (test > 0) {
addlistBT(term, file, curr->left);
}
if (test < 0) {
addlistBT(term, file, curr->right);
}
}
然后我打电话
addlistBT(term, file, mainListBT);
我后来在程序中遇到了段故障。 当我用gdb调试时,这就是我所看到的:
curr = temp;
(gdb) p temp
$7 = (WordPtrBT) 0x60a2a0
(gdb) p curr
$8 = (WordPtrBT) 0x0
(gdb) p mainListBT
$9 = (WordPtrBT) 0x0
(gdb) n
93 addfileBT(file, curr->file);
(gdb) p temp
$10 = (WordPtrBT) 0x60a2a0
(gdb) p curr
$11 = (WordPtrBT) 0x60a2a0
(gdb) p mainListBT
$12 = (WordPtrBT) 0x0
现在我的问题是,由于mainListBT被定义为指针,那么为什么mainListBT没有指向temp的指针? 谢谢
您的程序中存在多个错误。
首先,你正在做一个相当于这个:
void fn(int x) {
x = 1;
}
int main() {
x = 0;
fn(x);
// you expect x == 1 here, but you *should* expect 0.
}
就像你需要将&x
而不是x
传递给foo()
,你需要将&mainListBT
传递给addlistBT()
(并更改其签名)。
第二个明显的错误是这一行:
WordPtrBT temp = (WordPtrBT)malloc(sizeof(WordPtrBT));
当您希望为结构分配空间时,为指针分配空间。 它应该是
WordPtrBT temp = malloc(sizeof(*temp));
要么
WordPtrBT temp = malloc(sizeof(struct WordBT));
(并且你永远不应该转换malloc
调用的结果)。
你应该做什么:使用addlistBT(term,file,&mainListBT)调用; 然后将addlist函数更改为以下内容:
81 int addlistBT(char *term, char *file, WordPtrBT *curr){
86 if(!(*curr)){
87 WordPtrBT temp = (WordPtrBT)malloc(sizeof(struct WordBT));
88 temp->term = term;
92 *curr = temp;
94 return 1;
95 }
96 int test = //some test;
97 if(test == 0){ return 0;}
101 if(test > 0){ addlistBT(term, file, &(*curr)->left);}
104 if(test < 0){ addlistBT(term, file, &(*curr)->right);}
107 }
一些指针魔术......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.