c - 在 C 中使用 free()

标签 c malloc free

我正在做一些 C 练习(新手),我遇到了一点问题。我得到了一个先进先出队列,并被告知将删除函数修改为 FILO。

当我省略 free((void *) p) 时,这很好用; while 循环内的行,我从以前的方法中获取了这一行。谁能告诉我为什么有这条线时它不起作用?我猜我不能完全删除它是因为内存泄漏?

/* remove next Item from queue, placing it in the 2nd argument;
* return 1/0 if successful/queue empty */

int q_remove(Queue *q, Item i) {
struct q_element *p;
if (q->head == NULL)
    return 0;
if(q->head==q->tail){
    p=q->head;
    q->head=NULL;
    q->tail=NULL;
    memcpy(i, p->value, q->size);
    free(p->value);
    free((void *) p);
    return 1;
}
p=q->head;
while(p != NULL){
    if(p->next==q->tail){
        memcpy(i, p->next->value, q->size);
        free(p->next->value);
        q->tail=p;
        q->tail->next=NULL;
        free((void *) p);
        return 1;


    }
    p=p->next;

}

return 0;
}

最佳答案

问题是你在下一行代码中指向了你要释放的东西:

q->tail=p;
...
free((void *) p);

现在,当您尝试访问 q->tail 时,您会收到错误消息,因为您已经释放了该内存。

你应该尝试 free p->next 而不是 p(因为 p->next 是你队列中的最后一项 - 所以这是你想要取出的那个)

祝你好运:)

关于c - 在 C 中使用 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732182/

相关文章:

c - mmap() 返回 EINVAL

c - 分配指针的Strlen()

c - 释放对象错误

c - 在函数中释放 malloc 结构

c - 参数类型无效

c - 为什么程序没有正确获取输入

c - C 中的数组和 malloc

c - 为什么在使用 free() 释放内存时,指针指向的内容没有改变?

c - C 中函数 typedef 的前向声明

c - malloc分配的内存在物理上不一定是连续的吗?