C:尝试释放节点时出现SegFault错误

时间:2013-11-17 08:05:13

标签: c malloc free fault

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;
}

当我尝试释放'temp'时,我遇到了一个seg错误。我已经尝试过做一些研究,它建议取消引用temp。我不知道该怎么做。有任何想法吗? 感谢。

编辑:当我删除free(temp)时,一切正常,但是我的内存泄漏了。如果它不属于这个功能,我不知道在哪里放免费。我还添加了删除功能。应该免费进去吗?

1 个答案:

答案 0 :(得分:1)

为什么要在free(temp)中拨打insert_queue?您刚刚在队列中插入了一些数据。在这里调用free没有任何意义,因为它会使数据不可用。从队列中删除时应该释放它。

尝试删除该行。这不会导致内存泄漏。