Вы должны всегда компилировать со всеми включенными предупреждениями:
$ gcc -Wall -Wextra -W -pedantic -std=c99 q.c
q.c: In function ‘main’:
q.c:25:14: warning: unused parameter ‘argc’
q.c:25:27: warning: unused parameter ‘argv’
q.c:27:14: warning: ‘q’ is used uninitialized in this function
Первые два предупреждения вы можете игнорировать (пока), но третье намекает на вашу проблему.
int main(int argc, char **argv){
QUEUE q;
initQueue(q);
[snip]
void initQueue(QUEUE q){
q=(QUEUE)malloc(sizeof(Queue)*1);
В initQueue
вы изменяете локальный QUEUE
(который является указателем) q
, а не тот, что в main
.
Либо измените подпись initQueue
, чтобы взять QUEUE*
, и используйте *q
в этой функции, либо выполните следующее:
int main(int argc, char **argv){
QUEUE q;
q = initQueue();
[snip]
QUEUE initQueue(){
QUEUE q=(QUEUE)malloc(sizeof(Queue)*1);
q->head = q->tail = NULL;
return q;
}