everyone. I'm new to C. My code for queue by C language is not working, but I cannot understand where lays the cause. I got a segmentation fault error. What is the problem? Anyone, please help me. My english is bad, sorry.
I refered to this page.
I added the result of debug, I'm thinking about it...
thanks
#include <stdio.h>
#include <stdlib.h>
typedef struct element {
char v;
struct element *p;
} ELEM;
typedef struct {
ELEM *front;
ELEM *rear;
} queue;
queue *Q;
Q = (queue *)malloc(sizeof(queue));
Q->front = Q->rear = NULL;
int empty_q (){
return (Q == NULL);
}
void enqueue(char x){
ELEM *e;
e = (ELEM *)malloc(sizeof(ELEM));
if (e != NULL) {
e->v = x;
if (Q->front == NULL)
Q->front = e;
if (Q->rear != NULL)
Q->rear->p = e;
Q->rear = e;
Q->rear->p = NULL;
}
return;
}
char dequeue(){
char r = 0;
if(!empty_q()){
ELEM *e;
e = Q->front;
r = e->v;
Q->front = Q->front->p;
free(e);
}
return r;
}
int main(void){
enqueue('a');
enqueue('b');
enqueue('c');
while (!empty_q()) {
printf("%c \n", dequeue());
}
free(Q);
return 0;
}
Error
aa.c:20:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
Q = (queue *)malloc(sizeof(queue));
^
aa.c:20:1: error: redefinition of 'Q' with a different type: 'int' vs 'queue *'
aa.c:15:8: note: previous definition is here
queue *Q;
^
aa.c:21:1: error: unknown type name 'Q'
Q->front = Q->rear = NULL;
^
aa.c:21:2: error: expected identifier or '('
Q->front = Q->rear = NULL;
^
1 warning and 3 errors generated.
Q = (queue *)malloc(sizeof(queue)); Q->front = Q->rear = NULL;in main().