【发布时间】:2019-11-24 23:23:24
【问题描述】:
我正在尝试通过遍历列表来将项目添加到链表中以创建下一个节点。和列表中的最后一个节点指向新创建的节点。但我遇到了核心转储分段错误。
void linked_list_add(list_node_t *head, void *item)
{
list_node_t *temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
list_node_t *new_node = (list_node_t *)malloc(sizeof(list_node_t));
new_node->data = item;
new_node->next = NULL;
new_node->prev = temp;
//if(temp != NULL)
// temp->next = new_node;
// new_node->prev = temp;
}
TEST_F(LinkedList, Add)
{
int i = 3;
linked_list_add(list, &i);
ASSERT_EQ(list->next->data, &i);
i = 4;
linked_list_add(list, &i);
ASSERT_EQ(list->prev->data, &i);
i = 5;
linked_list_add(list, &i);
ASSERT_EQ(list->next->data, &i);
}
【问题讨论】:
-
temp可以为空吗? -
如果你搜索你的环境的调试,你可以得到一个堆栈跟踪,看看发生了什么。
-
从现在的代码格式来看,您似乎需要(仅)取消注释
temp->next = new_node;行,它将保留向前搜索您的链接列表以及您当前保留的向后搜索与现有的new_node->prev = temp;插入新节点时代码的编写方式旧的尾节点的next指针未设置为指向新添加的节点 -
@LucasRoberts。我也想看看
list的声明:) -
哦。
list->prev,列表头部之前的元素,应该始终为NULL,不是吗?此行将始终段错误:ASSERT_EQ(list->prev->data, &i);。即使在 Lucas Roberts 提出的修复方案之后。
标签: c linked-list