我在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被定义为指针,那么为什么它没有被赋予指向temp的指针呢?谢谢。
mainListBT
按值而不是按地址传递给addlistBT()
。因此,调用方指针变量没有任何改变,你的函数又浪费了内存,更加伤人。 - WhozCraigmalloc(sizeof(WordPtrBT))
是不正确的。应该是malloc(sizeof(*temp))
。 - keltar