Я просто тренируюсь с деревьями и не могу понять, почему я продолжаю получать seg-ошибку, когда пытаюсь вставить vcard в свое двоичное дерево поиска ... Любая помощь? Благодарю. Я прикрепил функцию и некоторые тесты, которые я использовал для запуска функции. По какой-то причине он работает в одном случае (когда я сопоставляю ID2 с bst), но не работает, когда я пытаюсь сопоставить 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));
}
опубликуйте достаточно кода, который кто-то может скомпилировать и запустить и увидеть тот же результат. [См. Здесь] (http://stackoverflow.com/help/mcve) для получения дополнительной информации –
Ну что ж, вы добавили «int main() {}" –
Где находится 'bst_singleton()'? – timrau