gpt4 book ai didi

c - 链表添加节点更改所有节点值,而不仅仅是一个

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

好吧,我已经为此工作了几个小时,但无法解决我的问题。我有一个双链表,当我尝试向它添加一个新节点时,它会更改链表中的所有值。

现在这就是我所拥有的:

void createSub(sibs *root, char *name, int size) {
if (root->subSibs == NULL) {
root->subSibs = (sibs *)malloc(sizeof(sibs));
root->subSibs->name = name;
root->subSibs->time_stamp = createTimeStamp();
root->subSibs->nextSib = NULL;
}

sibs *temp = root->subSibs;
if (temp != NULL) {
while(temp->nextSib != NULL)
temp = temp->nextSib;
}
sibs *t = (sibs *)malloc(sizeof(sibs));

t->name = name;
t->time_stamp = createTimeStamp();
t->nextSib = NULL;

if(temp != NULL)
temp->nextSib = t;

printf("root->subSibs->name = %s\n", root->subSibs->name);
(root->numSub)++;
}

考虑到我已经更改了一百万次,这可能并不完美。有人可以告诉我我在这里做错了什么吗?

root 是我正在使用的根节点,subSibs 是指向链表的指针。我正在做的是为 root->subSibs 指向的链表中的每个节点添加一个名称和时间戳。

我得到的是:

createSub(root, name1, size);

打印:

root->subSibs1: name1;

createSub(root, name2, size);

打印:

root->subSibs1: name2;
root->subSibs2: name2;

等...

这可能是一些非常非常愚蠢的错误,但任何帮助都会很棒。我已经尝试了几个小时,只需要有人告诉我为什么它会更改名称。

另外,如果我执行 strcpy(root->subSibsi->name, name);因为我 = 0-5; root->subSibs1->name 打印垃圾然后 root->subSibs2->name 打印正确的名字然后 root->subSibs3->name 打印垃圾(与 subSibs1->name 相同)等等...

最佳答案

t->name = name;

您正在复制指针。相反,您可能想要复制内存:

t->name = strdup(name);

或者:

t->name = malloc(strlen(name) + 1);
strcpy(t->name, name);

关于c - 链表添加节点更改所有节点值,而不仅仅是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170830/

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