我正在尝试运行一个删除链表的第n个元素的函数(使用从零开始的索引)。即使我没有必要malloc任何东西,我得到这个错误:“ev(10676,0x7fff73f9d300)malloc: *对象0x7fddc2404c10的错误:被释放的指针未被分配 * 在malloc_error_break中设置断点以调试“
以下是代码:
typedef struct intlist intlist;
struct intlist {
int val;
intlist* next;
intlist* intlist_remove_nth(intlist *xs, unsigned int n)
{
int i = 0;
if (n == 1)
{
intlist *tempremovefirst = xs->next;
free(xs);
return tempremovefirst;
}
intlist *temp = xs;
for (temp = xs; i != n - 1; i++)
{
temp = temp->next;
}
intlist *temp2 = temp->next;
temp->next = temp->next->next;
free(temp2);
return xs;
}
void evidence_intlist_remove_nth()
{
intlist *il1 = intlist_cons(1, NULL);
intlist *il2 = intlist_cons(4, il1);
intlist *il3 = intlist_cons(6, il2);
intlist *il4 = intlist_cons(8, il3);
intlist *il5 = intlist_cons(19, il4);
intlist *il6 = intlist_cons(24, il5);
intlist *il7 = intlist_cons(101, il6);
printf("expecting 101 24 19 6 4 1: ");
intlist_print(intlist_remove_nth(il7, 4));
printf("\n");
free(il1);
free(il2);
free(il3);
free(il4);
free(il5);
free(il6);
free(il7);
}
int main(int argc, char *argv[])
{
evidence_intlist_remove_nth();
return 0;
}
答案 0 :(得分:0)
如果您没有对列表中的项目进行操作,则不应该将其释放。 free()
仅用于释放malloc()
或其亲属之一返回的内存。