我只是在樹中練習一下,並且無法弄清楚爲什麼當我試圖在我的二叉查找樹中插入一個vcard時,我總是得到一個seg故障......任何幫助?謝謝。 我附加了函數,以及一些我用來運行函數的測試。 出於某種原因,它適用於一種情況(當我與bst匹配ID2時),但在嘗試將ID1與bst匹配時不起作用。打印答案時出現分段錯誤
謝謝!
typedef struct {
char *cnet;
char *email;
char *fname;
char *lname;
char *tel;
} vcard;
typedef struct bst bst;
struct bst {
vcard *c;
bst *lsub;
bst *rsub;
};
int bst_insert(bst *t, vcard *c) {
if (t->c == NULL) {
fprintf (stderr, "Empty vcard");
}
if (strcmp(c->cnet,t->c->cnet) == 0) {
return 0;
}
else if ((strcmp(c->cnet,t->c->cnet) < 0) && (t->lsub == NULL)) {
t->lsub->c = c;
return 1;
}
else if ((strcmp(c->cnet, t->c->cnet) < 0) && (t->lsub != NULL)) {
bst_insert(t->lsub, c);
}
else if ((strcmp(c->cnet, t->c->cnet) > 0) && (t->rsub == NULL)) {
t->rsub->c = c;
return 1;
}
else if ((strcmp(c->cnet, t->c->cnet) > 0) && (t->rsub != NULL)) {
bst_insert(t->rsub, c);
}
}
int main() {
vcard NewID;
NewID.cnet = "leeholim";
NewID.email = "[email protected]";
NewID.fname = "leeho";
NewID.lname = "lim";
NewID.tel = "555-555-5555";
vcard NewID2;
NewID2.cnet = "donalfonsodailey";
NewID2.email = "[email protected]";
NewID2.fname = "My name's donny";
NewID2.lname = "dailey";
NewID2.tel = "212-323-1234";
bst ID;
ID.c = &NewID;
ID.lsub = NULL;
ID.rsub = NULL;
printf("%s\n", Poop->c->fname);
printf("%d\n", bst_insert(&ID, &NewID2));
}
發佈足夠的代碼,其他人可以編譯並運行它並查看相同的結果。 [see here](http://stackoverflow.com/help/mcve)獲取更多信息 – 2015-02-11 03:29:28
那麼你去了,我加了「int main(){}」 – 2015-02-11 03:32:45
'bst_singleton()'在哪裏? – timrau 2015-02-11 03:33:04