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之类的成员。如果要向联系人添加新节点,该如何解决
最佳答案
您无需将任何存储分配给contacts
或在NULL
中将其设置为main
或测试在add
中是否为空。
如果幸运的话,因为您就在程序的开头,所以contacts
在传入时为NULL,因此add
顶部的if测试会因分段冲突而崩溃。
另外,您使用newNode
而不为其分配空间。
关于c - 如何在函数中使用结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43182857/