测试单链表的性能时出现AddressSanitizer错误

时间:2019-02-17 13:32:32

标签: c linked-list stack-overflow singly-linked-list address-sanitizer

我正在创建一个单链列表。为此,我编写了诸如struct node之类的结构和诸如list_free_node之类的操作。现在,这是我第一次使用mallocpointers,并且遇到了一些以前从未见过的错误(我认为与上述两个概念有关)。

我编写的代码似乎可以在我自己进行测试时工作,我uploaded出于测试目的,可以在浏览器中进行编译和在线运行。

但是,当我使用make check时,check_list.c会自动对其进行检查。发生这种情况时,我会得到以前从未见过的错误。

Errors about Deadlysignal

我搜索了那些错误,发现它与堆栈溢出有关。我认为错误可能是我使用了不存在的指针或其他东西。但是,当我手动运行代码时,它似乎可以正常工作。我不知道这是怎么发生的。

任何建议将不胜感激。

1 个答案:

答案 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 = NULLif主体并单独编写

    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指针)。只需交换最后两行。