【发布时间】:2013-11-17 19:33:18
【问题描述】:
void insert_queue (queue *this, queue_item_t item) {
//Inserts a new item at the end of queue.
queue_node *temp = malloc(sizeof (struct queue_node));
temp->item = item;
if (isempty_queue(this)) this->front = temp;
else this->rear->link = temp;
this->rear = temp;
//free(temp);
}
queue_item_t remove_queue (queue *this) {
assert (! isempty_queue (this));
//This removes the first item from queue.
queue_item_t temp = this->front->item;
this->front = this->front->link;
return temp;
}
当我尝试释放“临时”时,我收到了段错误错误。我应该在使用后释放一个节点,对吧?那么,在这种情况下如何防止内存泄漏呢?有任何想法吗? 谢谢。
当我删除 free(temp) 时,一切正常,但我遇到了内存泄漏。如果它不属于此功能,我不确定在哪里释放。我还添加了删除功能。 free 应该进去吗?
编辑编辑:谢谢大家,这是我更新的代码。
queue_item_t remove_queue (queue *this) {
assert (! isempty_queue (this));
queue_node *temp = this->front;
queue_item_t rVal = temp->item;
//Moves on to the next one.
this->front = this->front->link;
//Free the unlinked node.
//free(temp->item); <<<<---- This causes program to fail.
free(temp);
return rVal;
}
内存泄漏仍在发生。
【问题讨论】:
-
想想如果 this->rear == this->front in remove_queue 会发生什么。
-
@CharlieBurns +1 ,注意他不必检查 那个 比较,但他必须检查 something。如果
this->front == nullptr在推进之后,this->rear = nullptr;是要采取的行动。
标签: c memory-leaks malloc free