我正在创建一个单链列表。为此,我编写了诸如struct node
之类的结构和诸如list_free_node
之类的操作。现在,这是我第一次使用malloc
和pointers
,并且遇到了一些以前从未见过的错误(我认为与上述两个概念有关)。
我编写的代码似乎可以在我自己进行测试时工作,我uploaded出于测试目的,可以在浏览器中进行编译和在线运行。
但是,当我使用make check
时,check_list.c会自动对其进行检查。发生这种情况时,我会得到以前从未见过的错误。
我搜索了那些错误,发现它与堆栈溢出有关。我认为错误可能是我使用了不存在的指针或其他东西。但是,当我手动运行代码时,它似乎可以正常工作。我不知道这是怎么发生的。
任何建议将不胜感激。
答案 0 :(得分:1)
至少存在以下错误:
在struct Item arr[]={{25,18},{24,15},{15,10}};
list_add_front()
这里您忘记了 if (l -> head == NULL) {
l -> head = n;
return 0;
尚未初始化;缺少与n->next
等效的内容。当然,您可以合并类似的n->next = NULL
和if
主体并单独编写
else
在 n -> next = l -> head;
l -> head = n;
return 0;
这里您也忘记了list_add_back()
尚未初始化,n->next
丢失了。
或者,您可以在n->next = NULL
中设置n->next = NULL
。
在list_new_node()
list_cleanup()
释放节点后,我们一定不能使用节点的内容,因此,我们不能在 currentnode = nextnode;
list_free_node(currentnode);
nextnode = list_next(nextnode);
之后调用list_next()
(需要节点的->next
指针)。只需交换最后两行。