代码之家  ›  专栏  ›  技术社区  ›  mroWsymaS

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

  •  0
  • mroWsymaS  · 技术社区  · 7 年前

    我正在制作一个单链链表。我写了一些结构,比如 struct node list_free_node . 这是我第一次使用 malloc pointers ,我得到了一些我从未见过的错误(我认为与上述两个概念有关)。

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

    make check ,由自动检查 check_list.c

    Errors about Deadlysignal .

    我搜索了这些错误,发现它与堆栈溢出有关。我认为错误可能是我使用了一个不存在的指针。然而,当我手动运行我的代码时,它似乎工作得很好。我不明白这是怎么发生的。

    如有任何建议,将不胜感激。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Armali    7 年前

    至少有以下错误:

    • 在里面 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->下一步 尚未初始化,并且 n->下一步=空 不见了。

      n->下一步=空 list_new_node() .

    • 在里面 list_cleanup()

                  currentnode = nextnode;
                  list_free_node(currentnode);
                  nextnode = list_next(nextnode);
      

      我们不能在节点被释放后使用节点内容,因此我们不能调用 list_next() ->next list_free_node() . 把最后两行交换一下。