Очередь застряла в петле - PullRequest
       3

Очередь застряла в петле

0 голосов
/ 28 февраля 2019

Я реализовал очередь в C, как показано ниже.Но это застряло в петле.Если я удаляю free() из deQueue(), то он работает нормально.В чем причина такого поведения.

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>

struct item{

    int value;
    struct item* next;
};

struct item *front = NULL, *rear = NULL;

bool isEmpty(){

    return (front == NULL);
}

bool isFull(){

    return false;
}

bool enQueue( int value ) {

    struct item *temp = (struct item*) malloc( sizeof( struct item ) );
    if( temp == NULL ) {

        return false;
    }

    temp->value = value;
    temp->next = NULL;

    if( front == NULL ) {

        printf("Front is NULL\n");

        front = temp;
    }

    if( rear == NULL ) {

        printf("Rear is NULL\n");
        rear = temp;
    } else {

        printf("Rear Value %d \n", rear->value );

        rear->next = temp;
        rear = rear->next;

        printf("Rear Value %d \n", rear->value );
    }

    return true;
}

struct item* deQueue() {

    struct item *temp = front;
    front = front->next;

    return temp;
}

struct item* getFront(){

    return front;
}

struct item* getRear(){

    return rear;
}

void display(){

    struct item* temp = front;
    printf("\n[ ");
    while( temp ){

        printf("%d, ", temp->value);
        temp = temp->next;
    }
    printf("]\n");
}

int main(){

    enQueue(1);
    display();
    free(deQueue());
    display();
    enQueue(2);
    display();

    return 0;
}

1 Ответ

0 голосов
/ 28 февраля 2019

deQueue обновления front, но не rear.Последний остается висящим указателем, после того, как предмет уничтожен из-под него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...