2015-02-11 98 views
0

我只是在樹中練習一下,並且無法弄清楚爲什麼當我試圖在我的二叉查找樹中插入一個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)); 
} 
+0

發佈足夠的代碼,其他人可以編譯並運行它並查看相同的結果。 [see here](http://stackoverflow.com/help/mcve)獲取更多信息 – 2015-02-11 03:29:28

+0

那麼你去了,我加了「int main(){}」 – 2015-02-11 03:32:45

+0

'bst_singleton()'在哪裏? – timrau 2015-02-11 03:33:04

回答

1
else if ((strcmp(c->cnet,t->c->cnet) < 0) && (t->lsub == NULL)) { 
    t->lsub->c = c; 
    return 1; 
} 

絕對不應該分配t->lsub->ct->lsub == NULL

+0

謝謝!那麼我可以分配t-> lsub-> lsub和t-> lsub-> rsub爲NULL並使其消失嗎? – 2015-02-11 03:43:51

+0

@LhohoLim號你不應該取消引用NULL指針,更不要提及它的成員。 – timrau 2015-02-11 08:20:14