C 无法从以指针为参数的函数中的main方法引用指针

C 无法从以指针为参数的函数中的main方法引用指针,c,pointers,struct,insert,binary-tree,C,Pointers,Struct,Insert,Binary Tree,我最近完成了C编程语言第二版,我认为下一步很好的做法是使用C创建自己的数据结构库 我目前正致力于实现一个标准的二叉树,我一直坚持使用插入方法。到目前为止,我已经创建了节点结构: typedef struct node { int data; struct node * rc; struct node * lc; }NODE; 我试图让插入方法在树的根节点上工作。下面是我如何创建根节点以及如何在addNode函数中调用它: int main() { NODE *

我最近完成了C编程语言第二版,我认为下一步很好的做法是使用C创建自己的数据结构库

我目前正致力于实现一个标准的二叉树,我一直坚持使用插入方法。到目前为止,我已经创建了节点结构:

typedef struct node
{
    int data;
    struct node * rc;
    struct node * lc;
}NODE;
我试图让插入方法在树的根节点上工作。下面是我如何创建根节点以及如何在addNode函数中调用它:

int main() {
    NODE * root = NULL;
    addNode(12, root);

    return 0;
}
我的addNode函数的结构如下:

void addNode(int info, NODE * node)
{
    if (node == NULL) {
        node = (NODE *)malloc(sizeof(NODE));
        node->data = info;
        node->rc = NULL;
        node->lc = NULL;
    }
}
当我试图从main方法显示存储在NODE*root中的“data”的实际值时,我得到了一个分段错误。经过一番探索,我意识到这是因为我在addNode方法中为节点分配的内存实际上并没有将root重新定义为新分配的内存,而是创建了一个单独的node*节点


最终,我认为我的问题是我仍然在努力掌握C语言中的指针,但我非常希望能够深入了解如何修复代码。如果我的C术语还不太清楚,请提前道歉。

问题是,在addNode函数中,您实际上是在修改本地节点,而不是外部范围中的实际变量。要解决此问题,您需要在addNode中传递指向节点的指针。另外,请不要强制转换malloc的结果,因为它不是必需的,并且可能会隐藏错误,例如,您可能忘记添加所需的标题。

您应该添加一个简短的示例,说明这是什么样子。node=。。。在您的函数中,在本例中,main对调用者没有任何意义。指针在C中是按值传递的,就像其他任何东西一样。如果您想修改main中的指针,您必须通过指针的地址传递它,作为指向指针的指针,并在函数中相应地取消对它的引用以进行赋值,或者利用addNode的未使用返回结果。这个问题几乎每天都会出现在这里,所以应该会有一份副本。