What is wrong with my queue ADT?
Code:
#include "queue.h"
QUEUE* CreateQueue(void)
{
QUEUE* queue;
queue = (QUEUE*)malloc(sizeof(QUEUE));
if(queue)
{
int count = 0;
queue->front = NULL;
queue->rear = NULL;
}
else
return NULL;
return queue;
}
bool Enqueue(QUEUE* queue, void* dataptr)
{
NODE* newnode;
if(!(newnode = (NODE*) malloc(sizeof(NODE))))
return FALSE;
newnode->dataptr = dataptr;
newnode->next = NULL;
if(queue->count == 0)
queue->front = newnode;
else
queue->rear->next = newnode;
(queue->count)++;
queue->rear = newnode;
return TRUE;
}
void* Dequeue (QUEUE* queue)
{
void* dataOut;
NODE* temp;
if(queue->count == 0)
return NULL;
dataOut = queue->front->dataptr;
temp = queue->front;
queue->front = queue->front->next;
if(queue->count == 1)
queue->rear = NULL;
(queue->count)--;
free(temp);
return dataOut;
}
void* QueueFront (QUEUE* queue)
{
void* dataOut;
if(queue->count == 0)
return NULL;
else
return queue->front->dataptr;
}
void* QueueRear (QUEUE* queue)
{
void* dataOut;
if(queue->count == 0)
return NULL;
else
return queue->rear->dataptr;
}
bool EmptyQueue (QUEUE* queue)
{
return (queue->count == 0);
}
bool FullQueue (QUEUE* queue)
{
NODE* temp;
temp = (NODE*)malloc(sizeof(*(queue->rear)));
if(temp)
{
free(temp);
return FALSE;
}
return TRUE;
}
int QueueCount(QUEUE* queue)
{
return queue->count;
}
void DestroyQueue(QUEUE* queue)
{
NODE* temp;
if(queue->count != 0)
{
while(queue->front != NULL)
{
temp = queue->front;
queue->front = queue->front->next;
free(temp->dataptr);
free(temp);
}
}
free(queue);
}
So I tried to enqueue something very simple in main as so:
Code:
#include "queue.h"
int main(void)
{
int* a;
QUEUE* queue;
queue = CreateQueue();
a = (int*)malloc(sizeof(int));
*a = 1;
Enqueue(queue, a);
return 0;
}
When I compile, the program crashes and my debugger states that there was an exception at this line:
Code:
bool Enqueue(QUEUE* queue, void* dataptr){
NODE* newnode;
if(!(newnode = (NODE*) malloc(sizeof(NODE))))
return FALSE;
newnode->dataptr = dataptr;
newnode->next = NULL;
if(queue->count == 0)
queue->front = newnode;
else
queue->rear->next = newnode;
(queue->count)++;
queue->rear = newnode;
return TRUE;
}
I am using Microsoft visual studio 2010.
Any help is appreciated!