【发布时间】:2017-02-20 12:26:55
【问题描述】:
我只是在这个问题上坚持了几个小时,试图找出我的代码中断的地方。我知道如何删除链表,但有些东西不起作用。
首先它是一个非常简单的结构体,数据类型为 int 和 2 个结构体 *next 和 *prev。
struct _list_{
struct _list_ *next;
struct _list_ *prev;
float distance;
}
现在我正在制作一个 push_front 函数,效果很好。我得到了我正在寻找的结果。但现在我正在制作 pop_front 函数,但缺少一些东西。
该函数应该返回距离,然后从链表中删除该列表,但我无法做到。
这是我写的代码
int pop_front(list** header)
{
float number = (*header)->data;
list *head = *header;
list *remove = head;
// This should check if the pointer is pointing at the first element
while (head->prev != NULL) {
head = head->prev;
}
if (head) {
head = head->next;
free(remove);
remove = head;
remove->prev = NULL;
//if i remove the code below then i get this error
//*** Error in `./double_ended_queue.out': double free or
//corruption (fasttop): 0x0000000001d5a050 ***
//Pop up: 3 pointer: 3 Aborted (core dumped)
*header = *remove;
//And with this code i get a Segmentation fault (core dumped
return number;
}
return 0;
}
任何帮助都会很棒,谢谢。
附:在这里检查了所有的链表问题,没有任何帮助。
【问题讨论】:
-
delete是保留关键字。请重命名。 -
要么这是 C,然后你可以使用一个名为
delete的变量(虽然我不推荐它),或者它不是,那么你不应该。无论哪种方式,使用 both 语言标签都是错误的。 -
sry 删除了 c++ 标签
-
这看起来很奇怪。
*remove = head; free(remove); remove=head。你不是释放了head指向的东西,然后立即再次使用head吗? -
它应该显示到下一个元素。
标签: c linked-list