Search code examples
cpointersdeque

Dequeue function not working correctly


Can anyone tell me what's wrong with my dequeue function? It's always keeping the first value over and over, but otherwise seems to be working good. Sample output provided.

NODE *dequeue(NODE **queue)
    {
        if (*queue == NULL)
        {
            return;
        }
        NODE *pTemp = *queue;
        printf("[%d %d] -> ", pTemp->pid, pTemp->priority);
        *queue = (*queue)->next;
        return pTemp;
    }

enter image description here

Function is being called as such:

NODE *someQueue;
//code to add values here
for (i = 0; i < numberOfQueueItems; i++)
{
    printf("\nDequeue time.\n");
    printList("readyQ", someQueue);
    dequeue(someQueue);
}

Solution

  • You are not calling dequeue correctly. It expects a double pointer to NODE but you pass a pointer to NODE

    Change

    dequeue(someQueue);
    

    to

     dequeue(&someQueue);