c - 插入排序调试帮助

标签 c algorithm list sorting pointers

以下 C 代码不起作用(它只是清除列表):

/* Takes linkedlist of strings */
static int insertSort (linkedlist *list) {
  linkedlist sorted;
  void *data;
  node *one, *two, *newnode;
  unsigned int comp, x;

  removeHeadLL (list, &data);
  initLL (&sorted);
  addHeadLL (&sorted, data);

  while (list->count) {
    removeHeadLL (list, &data);
    two = sorted.head;

    x = 0;
    for (comp = strcomp (data, two->data) ; comp > 1 && x < sorted.count ; x++) {
      one = two;
      two = two->next;
    }

    if (x) {
      newnode = malloc (sizeof(node));
      newnode->next = two;
      newnode->data = data;
      one->next = newnode;
    }
    else {
      addHeadLL(&sorted, data);
    }

    (sorted.count)++;
  }

  destroythis (list);
  list = &sorted;
  return 0;
}

完整上下文:http://buu700.res.cmu.edu/CMU/15123/6/

最佳答案

如果你的意图真的是修改输入指针list指向这个函数内部分配的内存,那么你需要将函数声明为

static int insertSort (linkedlist **list)

然后从 sorted 返回新建列表,如下所示:

*list = &sorted;

就目前而言,调用 destroylist 会释放 list 中的内容,但赋值只会修改 本地副本输入指针。

换句话说,在您的原始代码中,这一行:

list = &sorted;

在函数外的影响完全为零,但是这一行:

  destroythis (list);

确实释放了入口时 list 拥有的内存。所以在返回后,您的输入指针现在访问一个空列表。

关于c - 插入排序调试帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048375/

相关文章:

c - 生成二进制序列

algorithm - 如何将树递归函数(或算法)转换为循环函数?

python - 为什么我的 Iterative Deepening Depth-First Search 实现占用的内存与 BFS 一样多?

java - Sum 存在于数组项中

Python - 循环嵌套字典并获取值

c++ - 矩阵乘法(我没有返回所有值)

c - 如何从 C99 函数声明中确定返回类型、参数、函数名

c - getaddrinfo() 返回几个相同的结果

python - 在Python中用列表列表压缩列表

Javascript - 如果选择下拉菜单,则更改容器中的图像