我的流行函數似乎不工作,因爲它應該。基本上,我的隊列有一個指向第一個和最後一個元素的指針。內存泄漏流行()爲A隊列
我的pop功能首先釋放第一個元素並將其分配給NULL。
然後它使用指針curr每次都到達下一個元素,直到找到NULL。
最後,我在我的隊列中的第一個指針被分配到上一頁,這是指向最後一個元素,我CURR達到零之前。
#include <stdlib.h>
struct Queue {
struct Node* first;
struct Node* last;
};
struct Node {
Item val;
struct Node* next;
};
void initQueue (struct Queue **queue){
(*queue) = malloc(sizeof(struct Queue));
(*queue)->first = NULL;
(*queue)->last = NULL;
}
struct Node* createNewNode(){
struct Node *newNode;
newNode = malloc(sizeof(struct Node));
newNode->next = NULL;
return newNode;
}
void push (Item val, struct Queue *queue){
struct Node* newNode = createNewNode();
newNode->val = val;
if(queue->first == NULL){
queue->first = newNode;
queue->last = newNode;
}
else{
newNode->next = queue->last;
queue->last = newNode;
}
}
void pop(struct Queue *queue){
struct Node* curr = queue->last;
struct Node* prev = queue->last;
free(queue->first);
queue->first = NULL;
while(curr != NULL){
prev = curr;
curr = curr->next;
}
queue->first = prev;
}
您的解決方案不會調整指針,它釋放** queue-> first **指向的內存位置。例如,一旦你**免費(第一)**,**隊列 - >第一**不再指向任何元素。相反,前一個元素現在應該指向** queue-> first **。 –
@ M.S我將它重新分配在免費的_before_上。 –
我已經添加了一個詳細的解釋,希望能夠澄清事情。 –