我在C语言中学习dinamic列表,这是我用结构和指针创建的一个队列,它正常地对节点进行排队,但是当我调用Dequeue并按顺序显示方法时,它进入一个循环并显示奇怪的随机数。


struct Node {
    int data;
    struct Node *next;
};

typedef struct Node node;
int size = 0;

node* front = NULL;
node* rear = NULL;

//在列表末尾添加新节点
无效队列(int n){
    node *new_node = (node*)malloc(sizeof(node));

    new_node->data = n;
    new_node->next = NULL;

    if (front == NULL && rear == NULL){
        front = new_node;
        rear = new_node;
        return;
    }

    rear->next = new_node;
    rear = new_node;
}

//在show()之前调用此方法时,会出现循环问题
无效出列(){
node *tmp = front; if (front == rear){ front = rear = NULL; } else { front = front->next; } free(front);}//if just calling Enqueue() and Show() methods, it runs normallyvoid Show(){ node *tmp = front; while(tmp != NULL){ printf("%d \n", tmp->data); tmp = tmp->next; }}int main(void){ Enqueue(1); Enqueue(2); Enqueue(3); Dequeue(); Show(); system("pause"); return 0;}

最佳答案

free(front);
我想你的意思是:

free(tmp);

就在您调用free()之前,您重新分配front以指向队列的新头,因此释放该节点不是您想要做的。tmp是指向原始头节点的指针的副本,在重新分配front后释放该指针是安全的。

关于c - 我在C中的动态队列显示无限的怪异结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52045859/

10-11 20:22