我有插入二叉搜索樹在C.一個問題,我有一個二叉樹的定義如下(請忽略行號):二叉搜索樹Ç
40 struct WordBT
41 {
42 char *term;
43 struct WordBT *right;
44 struct WordBT *left;
46 };
47 typedef struct WordBT* WordPtrBT;
49 WordPtrBT mainListBT;
而且我插入功能:
81 int addlistBT(char *term, char *file, WordPtrBT curr){
86 if(curr == NULL){
87 WordPtrBT temp = (WordPtrBT)malloc(sizeof(WordPtrBT));
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 }
然後我打電話
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被定義爲一個指針呢? 謝謝
其混賬恥辱KepaniHalo刪除他/她的答案,因爲它是正確的。你將'mainListBT'按值傳遞給'addlistBT()',而不是'by-address'。因此,調用者端指針變量沒有任何反應,並且你的函數泄漏內存以增加對受傷的傷害 – WhozCraig
除@ WhozCraig的註釋外,'malloc(sizeof(WordPtrBT))'不正確。它應該是'malloc(sizeof(* temp))' – keltar
等待,但mainListBT被定義爲指向結構的指針,所以我沒有傳遞指針? –