gpt4 book ai didi

c - 为什么我在链表开头插入节点的函数第二次失败了?

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

这是我使用双指针添加新节点的函数

void insertBefore(node_t **first)
{
node_t *new = NULL;
new = (node_t *) malloc(sizeof(node_t));
new->next = *first;
*first = new;
free(new);

}

如果我使用过一次,似乎一切正常。但是,如果我再次使用它,我的链表就会乱七八糟。我有下面的输出图像(同样的事情发生在我的函数中,将节点插入到任何位置)。我试着把代码的一些非常具体的部分放在一起,所以如果你怀疑我在其他部分做错了什么,请告诉我。知道我做错了什么吗?

The output image

最佳答案

只需删除 free(new);。由于 new*first 具有相同的值,释放 new 也会释放 *first

精简代码:

void insertBefore(node_t **first)
{
node_t *new = malloc(sizeof(node_t)); //don't cast
if(!new)
{
fputs("Don't have enough memory", stderr);
return;
}
new -> next = *first;
*first = new;
}

关于c - 为什么我在链表开头插入节点的函数第二次失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36097973/

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