以下 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;
}
最佳答案
如果你的意图真的是修改输入指针list
指向这个函数内部分配的内存,那么你需要将函数声明为
static int insertSort (linkedlist **list)
然后从 sorted
返回新建列表,如下所示:
*list = &sorted;
就目前而言,调用 destroylist
会释放 list
中的内容,但赋值只会修改 本地副本输入指针。
换句话说,在您的原始代码中,这一行:
list = &sorted;
在函数外的影响完全为零,但是这一行:
destroythis (list);
确实释放了入口时 list
拥有的内存。所以在返回后,您的输入指针现在访问一个空列表。
关于c - 插入排序调试帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048375/