无法在将指针作为参数的函数中引用来自 main 方法的指针
Unable to refer to pointer from main method within function that takes in pointer as argument
我最近完成了 "The C Programming Language - 2nd Edition",我认为下一步是使用 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 重新定义为新分配的值为 'info' 的内存,而是创建了一个单独的 NODE *节点。
最终我认为我的问题是我仍在尝试掌握 C 中的指针,但我将非常感谢任何关于如何修复我的代码的见解。 (如果我的 C 术语还不完整,请提前抱歉)
问题在于,在您的 addNode 函数中,您实际上是在修改局部 node
,而不是外部作用域中的实际变量。要解决此问题,您需要将 指针传递给 指向 addNode
中的 NODE
的指针。另外,请不要转换 malloc 的结果,因为它不是必需的,它可能会隐藏错误,即您可能会忘记添加所需的 headers.
我最近完成了 "The C Programming Language - 2nd Edition",我认为下一步是使用 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 重新定义为新分配的值为 'info' 的内存,而是创建了一个单独的 NODE *节点。
最终我认为我的问题是我仍在尝试掌握 C 中的指针,但我将非常感谢任何关于如何修复我的代码的见解。 (如果我的 C 术语还不完整,请提前抱歉)
问题在于,在您的 addNode 函数中,您实际上是在修改局部 node
,而不是外部作用域中的实际变量。要解决此问题,您需要将 指针传递给 指向 addNode
中的 NODE
的指针。另外,请不要转换 malloc 的结果,因为它不是必需的,它可能会隐藏错误,即您可能会忘记添加所需的 headers.