“指针被释放没有分配错误”

时间:2016-02-21 00:26:03

标签: c pointers linked-list

我正在尝试运行一个删除链表的第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;
}

1 个答案:

答案 0 :(得分:0)

如果您没有对列表中的项目进行操作,则不应该将其释放。 free()仅用于释放malloc()或其亲属之一返回的内存。