[英]Function not adding element to doubly linked list
我一直在用C语言编写一个双向链接列表,即使对我来说在列表后面插入元素的功能似乎正确,但未添加该元素。 调试显示,这些值已分配给相应的Pacijent实例,但是列表的前面和后面仍然是NULL
。
这是代码:
struct Pacijent
{
char ime[10];
[...]
Pacijent *prev;
Pacijent *next;
};
Pacijent noviPacijent(char i[], char p[], char io[], int jmb[], double v, double t, int s)
{
Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
memcpy(novi->ime, i, strlen(i)+1);
[...]
return *novi;
}
struct Lista
{
Pacijent *front;
Pacijent *back;
};
void assign(Pacijent p1, Pacijent p2)
{
memcpy(p1.ime, p2.ime, strlen(p1.ime)+1);
[...]
}
void insertBack(Pacijent p, Lista l)
{
Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
assign(*novi, p);
if (l.back == NULL)
{
l.front = l.back = novi;
novi->prev = NULL;
novi->next = NULL;
}
else
{
novi->prev = l.back;
l.back->next = novi;
novi->next = NULL;
l.back = novi;
}
}
int main()
{
Lista *lista = (Lista*)malloc(sizeof(Lista));
lista->back = lista->front = NULL;
int jmb2[13] = { 1, 2, 0, 1, 9, 9, 3, 0, 0, 0, 0, 0, 0 };
[...]
Pacijent p2 = noviPacijent("Mladen", "Markovic", "Milan", jmb2, 1.85, 75, 21);
insertBack(p2, *lista);
}
看着:
void insertBack(Pacijent p, Lista l)
此函数将Lista值作为参数,而不是Lista指针。 这意味着,如果更改有关l
任何内容,它将不会在函数外部产生影响。 调用insertBack
,实际上是在复制列表,然后将元素添加到临时列表。
编辑:您的assign
函数也发生了同样的情况,对p1
所做的更改不会对该函数产生任何影响,因为您将其作为值而不是指针进行了传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.