D
Deniz Bahar
Hi,
I'm working with a single linked list and want to delete elements by
searching through the list (starting form the HEAD) then finding the
element, then doing the following:
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement);
Does the double ->next invoke undefined behaviour (sequence points
etc)?
========
The full function follows:
========
typedef struct ElementTag Element;
extern Element *NewElement;
extern Element *CurrentElement;
extern Element *HeadElement;
/* Finds and deletes person- returns 1, returns 0 for failure) */
int
FindDeletePerson(const char *name)
{
if(!strcmp(HeadElement->Person.name, name))
{
NewElement = HeadElement->next;
free(HeadElement);
HeadElement = NewElement;
return 1;
}
else
{
CurrentElement = HeadElement;
while(CurrentElement->next)
{
if(!strcmp(CurrentElement->next->Person.name, name))
{
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement);
return 1;
}
CurrentElement = CurrentElement->next;
}
}
return 0;
}
I'm working with a single linked list and want to delete elements by
searching through the list (starting form the HEAD) then finding the
element, then doing the following:
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement);
Does the double ->next invoke undefined behaviour (sequence points
etc)?
========
The full function follows:
========
typedef struct ElementTag Element;
extern Element *NewElement;
extern Element *CurrentElement;
extern Element *HeadElement;
/* Finds and deletes person- returns 1, returns 0 for failure) */
int
FindDeletePerson(const char *name)
{
if(!strcmp(HeadElement->Person.name, name))
{
NewElement = HeadElement->next;
free(HeadElement);
HeadElement = NewElement;
return 1;
}
else
{
CurrentElement = HeadElement;
while(CurrentElement->next)
{
if(!strcmp(CurrentElement->next->Person.name, name))
{
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement);
return 1;
}
CurrentElement = CurrentElement->next;
}
}
return 0;
}