好吧,我已经为此工作了几个小时,但无法弄清楚我的问题。我有一个双链表,当我尝试向其中添加一个新节点时,它会更改链表中的所有值。
现在这就是我所拥有的:
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;
ETC...
这可能是一些非常愚蠢的错误,但任何帮助都会令人惊叹。我已经尝试了几个小时,只需要有人告诉我为什么它会更改名称。
另外,如果我strcpy(root->subSibsi->name, name); for i = 0-5; root->subSibs1->name
打印垃圾然后root->subSibs2->name
打印正确的名称,然后root->subSibs3->name
打印垃圾(与 相同subSibs1->name
)等等......