我正在尝试学习如何正确使用C中的指针。目前,我正在尝试创建将在该节点之前插入新节点的函数,该值被赋予。我的功能如下:
struct list *listAddBefore(struct list *element, int insertWhat, int insertBefore)
{
element = listToFirst(element);
while (element -> next)
{
if (element -> value == insertBefore)
{
struct list *temp = listCreateElement(insertWhat, element->prev, element);
element -> prev -> next = temp;
element -> prev = temp;
return temp;
}
element = element -> next;
}
return NULL;
}
struct list *listToFirst(struct list *element)
{
while (element -> prev)
element = element -> prev;
return element;
}
struct list *listCreateElement(int value, struct list *prev, struct list *next)
{
struct list *element = (struct list *) malloc(sizeof(struct list));
element -> value = value;
element -> prev = prev;
element -> next = next;
return element;
}
有什么问题?编译器给我分段错误。
答案 0 :(得分:1)
您的代码有一个重要问题
while (element->next)
应该是
while (element)
因为对于第一个元素element->next = NULL
,因此您的函数将立即返回NULL
。然后,您将再次传递head元素,并在每次调用此函数时重复该行为。
下面
element->prev->next = temp;
您将取消引用第一个节点必须为element->prev
的{{1}},您必须检查它是否有效,否则您将导致segmentation fault。这是链接节点的正确方法。
我修复了您的代码,以帮助您了解如何使用链接列表
NULL