测试单链表性能时出现AddressSanitizer错误
AddressSanitizer errors when testing the performance of singly linked list
我正在创建一个单链表。为了创建它,我编写了 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
主体并单独编写
n -> next = l -> head;
l -> head = n;
return 0;
在list_add_back()
这里你也忘了n->next
还没有初始化,n->next = NULL
不见了。
或者您可以在 list_new_node()
中设置 n->next = NULL
。
在list_cleanup()
currentnode = nextnode;
list_free_node(currentnode);
nextnode = list_next(nextnode);
我们不能在节点被释放后使用节点内容,因此我们不能在list_free_node()
之后调用list_next()
(需要节点的->next
指针)。只需交换最后两行即可。
我正在创建一个单链表。为了创建它,我编写了 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
主体并单独编写n -> next = l -> head; l -> head = n; return 0;
在
list_add_back()
这里你也忘了
n->next
还没有初始化,n->next = NULL
不见了。或者您可以在
list_new_node()
中设置n->next = NULL
。在
list_cleanup()
currentnode = nextnode; list_free_node(currentnode); nextnode = list_next(nextnode);
我们不能在节点被释放后使用节点内容,因此我们不能在
list_free_node()
之后调用list_next()
(需要节点的->next
指针)。只需交换最后两行即可。