gpt4 book ai didi

c - 未经命令而更改的列表

转载 作者:行者123 更新时间:2023-11-30 17:33:49 25 4
gpt4 key购买 nike

我什至不知道如何标题这个问题,但它如下:在我的代码中,我复制一个队列(在本例中几乎与链接列表相同)并更改重复项,但更改原始值也在发生变化。我不知道我在哪里改变它,所以我希望有人能提供帮助。 printf 是为了阐明我的观点,它们应该始终具有相同的输出。

int list(Queue list, int sort )
{
Queue temp = list ;

int s=temp->size ;
int i=0, j, p;
int *sender, *receiver ;
char **sorted ;
char* t ;

if ( list == NULL )
{
puts("NULL") ;
return 0;
}


t=(list->head->item->text);
printf("%s", t );

sorted = malloc((s + 1) * sizeof(char *));
sender = malloc( s * sizeof(int));
receiver = malloc( s * sizeof(int));

while ( i < s )
{
/* It's changing somewhere around here */

sorted[i] = malloc(strlen(temp->head->item->text) + 1);
strncpy( sorted[i] , temp->head->item->text, strlen(temp->head->item->text) + 1 ) ;
sender[i] = temp->head->item->sender ;
receiver[i] = temp->head->item->receiver ;
if (temp->head->next == NULL)
break;
temp->head = temp->head->next ;
i++ ;
}

t=(list->head->item->text);
printf("%s", t );

最佳答案

Queue temp = list ; 不会重复您的队列。它复制了Queue结构,但该结构不保存队列。相反 - 它保存指向队列的 head 的指针(并且因为它是一个队列 - 也可能指向它的 tail )。当您复制结构体时,head 指针保持不变,这意味着您正在修改相同的节点。

如果要复制队列,则必须迭代所有元素并将它们中的每一个复制到新队列中。

关于c - 未经命令而更改的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621235/

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