c - 初始化包含指向数组的指针的结构

标签 c pointers struct

我有以下结构:

typedef struct TRIE_NODE
{
    char* word;
    struct TRIE_NODE* node[26];
}TRIE_NODE;

我创建一个名为 head 的节点,TRIE_NODE *head = NULL;,然后尝试使用以下函数初始化该节点:

void initialize_node(TRIE_NODE *current_node)
{
    int MAX = 25;

    current_node = malloc(sizeof(TRIE_NODE));

    for(int i = 0; i < MAX; i++)
    {
        current_node->node[i] = NULL;
        if(current_node->node[i] == NULL)
            printf("\n -- \n");
    }
}

但是,每当我尝试读取 current_node->node[i] 时,我都会遇到段错误。有人知道发生了什么事吗?考虑到 current_node->node 是一个指针,它指向另一个 TRIE_NODE 类型的指针,我是否应该能够通过括号表示法访问它的值? (我也尝试过取消引用它,但它无法编译)

最佳答案

你做的一切都是正确的,除了这一行

current_node = malloc(sizeof(TRIE_NODE));

它修改current_node的本地副本。调用者中的指针保持不变。

要解决此问题,请将指针传递给指针,并使用间接运算符进行赋值:

void initialize_node(TRIE_NODE **current_node_ptr) {
    ...
    *current_node_ptr = malloc(sizeof(TRIE_NODE));
    ...
}

关于c - 初始化包含指向数组的指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629185/

相关文章:

c++ - 未定义模板的qt隐式实例化 'QList<VPNConnection>'

c - 为什么在类型定义结构时使用不同的标识符?

java - 静态字段的 JNI 字段 ID

c++ - C中的返回地址

c++ - *(char**) 如何理解这个构造?

c++ - 如果我删除指向节点的指针数组,节点本身会被删除吗?

c - 使用 free() 时获取核心转储

c - v[2] 在 c 中的结构方面意味着什么?

c - 为什么我不能用 std=c99 声明 sigset_t?

c - 在C语言中使用指针有什么好处?