我正在创建一个单向链表。为了创建它,我编写了诸如 struct node
之类的结构和诸如 list_free_node
之类的操作。现在这是我第一次使用 malloc
和 pointers
,我遇到了一些以前从未见过的错误(我认为与提到的这两个概念有关)。
我编写的代码在我自己测试时似乎有效,我 uploaded它用于测试目的,它可以编译并在浏览器中在线运行。
但是,当我使用make check
时,check_list.c 会自动检查它.发生这种情况时,我会遇到以前从未见过的错误。
我搜索了那些错误,发现它与堆栈溢出有关。我认为错误可能是我使用了一个不存在的指针或其他东西。但是,当我手动运行我的代码时,它似乎工作得很好。我不明白这是怎么发生的。
如有任何建议,我们将不胜感激。
最佳答案
至少有这些错误:
在
list_add_front()
if (l -> head == NULL) { l -> head = n; return 0;
在这里你忘了
n->next
尚未初始化;相当于n->next = NULL
的东西不见了。当然你可以合并类似的if
和else
body 和单独写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
指针)在list_free_node()
之后.只需交换最后两行即可。
关于c - 测试单链表性能时出现AddressSanitizer错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733773/