【问题标题】:"Pointer being freed not allocated error"“指针被释放未分配错误”
【发布时间】:2016-02-21 00:26:03
【问题描述】:

我正在尝试运行一个删除链表的第 n 个元素的函数(使用从零开始的索引)。即使我不必 malloc 任何东西,我也收到此错误:“ev(10676,0x7fff73f9d300) malloc: * error for object 0x7fddc2404c10: pointer being free was not assigned * 在 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;
}

【问题讨论】:

  • free(il3); 是两次free。 (也是指数与预期不同)

标签: c pointers linked-list


【解决方案1】:

如果您不分配列表中的项目,则不应释放它们。 free() 仅用于释放由malloc() 或其亲属之一返回的内存。

【讨论】:

  • 我在我的主要功能中分配列表中的项目。这就是为什么我不确定为什么我仍然会收到此错误。
  • 刚刚发布了剩下的!
  • 我没有看到 intlist_cons。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
相关资源
最近更新 更多