我正在通過一些C練習(新手)我碰到了一些問題。我獲得了先進先出隊列,並告訴將修改remove函數爲FILO。 ((void *)p);這可以很好地工作。在while循環中,我從前面的方法中取出了這一行。任何人都可以告訴我爲什麼當這條線在那裏時不起作用?我猜我不能刪除它由於內存泄漏entirly?在C中使用free()
/* remove next Item from queue, placing it in the 2nd argument;
* return 1/0 if successful/queue empty */
int q_remove(Queue *q, Item i) {
struct q_element *p;
if (q->head == NULL)
return 0;
if(q->head==q->tail){
p=q->head;
q->head=NULL;
q->tail=NULL;
memcpy(i, p->value, q->size);
free(p->value);
free((void *) p);
return 1;
}
p=q->head;
while(p != NULL){
if(p->next==q->tail){
memcpy(i, p->next->value, q->size);
free(p->next->value);
q->tail=p;
q->tail->next=NULL;
free((void *) p);
return 1;
}
p=p->next;
}
return 0;
}
對不起,但這不能編譯。請提供您參考的代碼,不作任何修改。 – 2011-04-20 14:45:52
刪除轉換爲(void *),調用free()時不需要。 – unwind 2011-04-20 14:47:00