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/