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/

10-12 15:59