【发布时间】:2020-12-02 02:15:43
【问题描述】:
假设我有以下结构
typedef struct node {
unsigned long data;
struct node* next;
} node;
typedef struct queue {
node* head;
node* tail;
int size;
int capacity;
} queue;
queue* buildar()
{
queue* arr = malloc(num * sizeof(queue));
int i;
for (i = 0; i < num; i++)
{
queue* r = malloc(sizeof(queue));
r->head = NULL;
r->tail = NULL;
r->size = 0;
r->capacity = assoc;
arr[i] = *r;
}
return arr;
}
如何释放队列中的所有项目? 我已经尝试过这样做
for (size_t i = 0; i < numberofsets; i++)
{
node* temp = arr[i].head;
arr[i].head = arr[i].head->next;
free(temp);
}
free(arr);
但它似乎不起作用。任何帮助表示赞赏。
【问题讨论】:
-
您有一个队列数组,而不是一个队列。这真的是你想要的吗?
-
是的,这正是我想要的@kaylum
-
那么你需要一个遍历
next指针的内部循环来释放每个节点。最后你需要free(queue[i]) -
您的队列数组结构看起来不正确。或者至少不是很好。你应该有一个
queue *的数组,而不是queue的数组。目前你有内存泄漏。在buildar中,r指针值丢失,因此永远无法释放。 -
请详细描述“它似乎不起作用”。在您分配队列根数组的分配循环中,您不需要内部
malloc();删除它并将所有r->替换为arr[i]。对于您的free()循环,您只释放每个队列中的第一个项目;您需要按照next来释放每个队列中的所有内容。
标签: c data-structures queue