【问题标题】:Unable to refer to pointer from main method within function that takes in pointer as argument [duplicate]无法从将指针作为参数的函数中的主方法引用指针[重复]
【发布时间】:2019-01-29 04:54:58
【问题描述】:

我最近完成了“C 编程语言 - 第 2 版”,我认为下一步是使用 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 * 根目录中的“数据”的实际值时,我遇到了分段错误。经过一番探索,我意识到这是因为我在 addNode() 方法中为节点分配的内存实际上并没有将 root 重新定义为新分配的内存,值为 'info',而是创建了一个单独的 NODE * 节点。

最终我认为我的问题是我仍在尝试掌握 C 语言中的指针,但我非常感谢任何关于如何修复我的代码的见解。 (如果我的 C 术语还没有出现,请提前抱歉)

【问题讨论】:

  • node = ... 在你的函数中对调用者来说意味着 nothing(在本例中为 main)。指针在 C 中按值传递,就像其他所有内容一样。如果您想修改main() 中的指针,您要么必须通过地址(指针的地址,因此作为指针的指针)传递它,并在您的函数中相应地取消引用它以进行赋值,或者利用其他未使用的返回结果的addNode。这个问题几乎每天都会出现在这里,所以应该会有一个副本。 Like this one.

标签: c pointers struct insert binary-tree


【解决方案1】:

问题在于,在您的 addNode 函数中,您实际上是在修改本地 node,而不是外部作用域中的实际变量。要解决此问题,您需要在addNode 中传递一个指向 指向NODE 的指针。另外,请不要强制转换 malloc 的结果,因为它不是必需的,它可能会隐藏错误,即您可能会忘记添加所需的标头。

【讨论】:

  • 你应该添加一个简短的例子来说明它的样子。
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 2020-12-12
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多