c - 无法修复内存泄漏

标签 c memory-leaks free

void insert_queue (queue_ref queue, queue_item_t item) {   
   queuenode_ref new = malloc(sizeof (struct queuenode));
   assert(new != NULL);
   new->item = item;
   new->link = NULL;

   if (!isempty_queue(queue)) {
      queue->rear->link = new;
      queue->rear = new;   
   } else {
      queue->front = new;
      queue->rear = new;
   }
}

我很难修复此函数中的内存泄漏。我尝试在函数结束时 free(new) ,但它仍然没有修复泄漏。我应该把这个声明放在哪里?

最佳答案

看起来您正在创建一个链表,并且 insert_queue() 函数将一个元素添加到该链表。这意味着在你调用这个函数 10 次之后,内存中的某处应该有一个队列,其中有 10 个元素。这个想法是您可以在程序的其他地方使用这个队列。

如果您清除所有在 insert_queue() 中分配的内存,那么您将无法增加您的队列。内存泄漏是您在完成队列后摆脱队列的任何地方。如果您什么都不做,那么这 10 个元素将在内存中徘徊,直到您的整个程序退出。

你应该做两件事。在您的 remove_queue() 函数(从队列中删除元素的函数)中,您应该在删除的节点上调用 free()。而且,如果在您完成处理时队列不为空,那么您应该对所有剩余元素调用 remove_queue() 以确保将它们占用的内存返回给系统。

关于c - 无法修复内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22059765/

相关文章:

c - 加法序列算法

C11 混合对变量的原子和非原子访问

c++ - 将char数组传递给exec *()系列函数后,如何释放它们的内存

c++ - Boost asio async_write_some 泄漏?

javascript - 使用 XMLHttpRequest 自动网页刷新内存泄漏

c++ - malloc() 和 free() 是如何工作的?

c - C程序如何产生这样的输出?

c++ - 重新分配std::unique_ptr时是否释放内存?

c - 我得到了 3 个结构,我必须使用堆并将一些数据输入到结构的成员中

python - 如何创建 Python 不会释放的缓冲区?