gpt4 book ai didi

c - 为什么没有创建新节点?

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:10 25 4
gpt4 key购买 nike

我在 C 代码中有以下方法。

    void add(int number)
{
Node node1; // a new node should be created
createNodeRelationshipBetween(&node1, current);
setData(&node1, number);
setCurrentNode(&node1);
incrementSize();
printf("Inserted Node [data:- %d, Node address:- %p\n", node1.data, &node1);
}

其中节点定义为

typedef struct node
{
struct node *prior;
struct node *next;
int data;
} Node;

我在循环中调用 add()。我的理解是每次我调用 add(i) 时,都应该创建一个新节点。相反,当我打印 node1 的地址时,它每次都是相同的。有人可以解释错误在哪里以及我如何创建新节点吗?

最佳答案

该代码正在堆栈上创建一个节点结构。一旦您离开该节点的功能,该节点就会被销毁。指针是相同的,因为它每次都指向堆栈上的同一个局部变量。解决方案是使用类似于 malloc 的变量在堆上分配空间。 :

malloc( sizeof( Node ) )

然后您可以按照自己的方式使用返回的指针。别忘了 free完成后的节点。

关于c - 为什么没有创建新节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com