2017-04-03 81 views
0
typedef struct node { 
    int num_children; 
    struct node *children[ALPHABET_LENGTH]; 
} trie_node; 

void add(char* a, trie_node* node){//need to make sure a is not NULL at beginning 
    trie_node* newNode; 
    int i; 
    if (a != NULL && node->children[(int)a[0] - 97] == NULL) 
    { 
     node->num_children++; 
     //initialize the children array 
     for (i = 0; i < ALPHABET_LENGTH; i++) 
     { 
      if (newNode->children[i] != NULL) 
      { 
       newNode->children[i] = NULL; 
      } 
     } 
     newNode -> num_children = 0; 
     a++; 
     add(a, newNode); 
    } 
    else if (a != NULL && node->children[(int)a[0] - 97] != NULL){ 
     a++; 
     node->num_children++; 
     add(a, node->children[(int)a[0] - 97]); 
    } else{//a == NULL, which means end of the add procedure 
     return; 
    } 
} 


int main() 
{ 
     char* s = "add abc"; 
     trie_node* contacts; 
     add(s,contacts); 
     return 0; 
} 

當我初始化main函數中的struct trie_node時,我可以訪問聯繫人的所有成員。但是,當我在我的add函數中這樣做時,newNode不起作用。我無法在newNode下訪問像num_children這樣的成員。我怎麼能解決這個問題,如果我想要一個新的節點添加到聯繫人如何在函數中使用struct

+1

您從未將'newnode'設置爲任何值。在將其傳遞給函數之前,您也不設置「聯繫人」。您的代碼遍佈全局的未定義行爲。 – kaylum

+1

C或C++?下定決心。 – molbdnilo

+1

另外你還沒有設置'contacts' – kuro

回答

0

你沒有任何stoarge在main或測試分配給contacts或將其設置爲NULL,如果它是空的add

如果你很幸運,因爲你在程序開始時是正確的,所以當你通過它時,contacts是NULL,所以add頂部的if測試會隨着分段衝突而崩潰。

此外,您使用newNode而不分配空間。