c言語でリングバッファを用いたキューのライブラリを作成していますが、実行時にセグフォが出ます。原因がわかる方ご教示ください。
c言語でリングバッファを用いたキューのライブラリを作成していますが、実行時にセグフォが出ます。原因がわかる方ご教示ください。 #include <stdio.h> #include "queue.h" int QueueAlloc(Queue *q, int max){ q->que = 0; if((q->que = calloc(max, sizeof(int))) == NULL){ q->max = 0; return -1; } q->max = max; return 0; } void QueueFree(Queue *q){ if(q->que != NULL){ free(q->que); } } int QueueEnque(Queue *q, int x){ if(q->num = q->max){ return -1; } q->que[q->rear] = x; q->rear ++; if(q->rear == q->max){ q->rear = 0; } q->num++; return 0; } int QueueDeque(Queue *q, int *x){ if(q->num == 0){ return -1; } *x = q->que[q->front]; q->rear ++; if(q->front == q->max){ q->front = 0; } q->num--; return 0; } int QueueSize(const Queue *q){ return q->max; } int QueueNo(const Queue *q){ return q->num; } int QueueIsEmpty(const Queue *q){ if(q->num == 0){ return 1; }else{ return 0; } } int QueueIsFull(const Queue *q){ if(q->num == q->max){ return 1; }else{ return 0; } } int main(void){ int i; Queue *q1 = { 9, 0, 0, 0, 0 }; if(QueueAlloc(q1, q1->max)==0){ printf("キューを作成します"); }else{ printf("記憶域を確保できませんでした。"); } printf("キューに格納することができるデータ数は%dです", QueueSize(q1)); QueueEnque(q1, 1); QueueEnque(q1, 2); QueueEnque(q1, 3); QueueEnque(q1, 4); QueueEnque(q1, 5); QueueEnque(q1, 6); printf("現在キューに格納されているデータ数は%dです", QueueNo(q1)); QueueFree(q1); }
queue.hはこちらです。 #include <stdio.h> typedef struct { int max; int num; int front; int rear; int *que; } Queue;
C言語関連・36閲覧