请问这里为什么segmentation fault(应该是Dequeue函数的问题?)


#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
void Initializequeue(Queue* pq)
{
    pq->rear=pq->front=NULL;
}

bool Queueisfull(Queue* pq)
{
    return pq->items==MAXQUEUE;
}

bool Queueisempty(Queue* pq)
{
    return pq->items==0;
}

int Queuecount(Queue* pq)
{
    return pq->items;
}

bool Enqueue(Item item,Queue* pq) //pq是一个指向Queue的指针   Node*是一个指向Node的指针  
{                       //关联是Queue->front指向一个Node的结构 
    Node* pt;         
    pt=(Node*)malloc(sizeof(Node));
    pt->item=item;
    pt->next=NULL;
    //Node* p=pq->front;
    if(pq->front==NULL)
      pq->front=pt;
    else 
        pq->rear->next=pt;
    pq->rear=pt;
    pq->items++;
};
void Dequeue(Queue* pq,Item *pitem)
{

    *pitem=pq->front->item;
    Node* p=pq->front->next;
    free(pq->front);
    pq->front=p;
    pq->items--;
    //return pitem;
}
void Emptythequeue(Queue* pq)
{
    Item dummy;
    while(!Queueisempty(pq))
         Dequeue(&pq,&dummy);
}




/*queue.h*/
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdbool.h>

#define MAXQUEUE 10

typedef struct{
    long arrive;
    int processtime;
} Item;

typedef struct node{
    Item item;
    struct node* next;
}Node; 

typedef struct queue{
    Node * front;
    Node * rear;
    int items;
}Queue;

void Initializequeue(Queue* pq);
bool Queueisfull(Queue* pq);
bool Queueisempty(Queue* pq);
int Queuecount(Queue* pq);
bool Enqueue(Item item,Queue* pq);
void Dequeue(Queue* pq,Item *item);
void Emptythequeue(Queue* pq);
#endif 




#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "queue.h"
#define MIN_PER_HOUR 60.0
bool newcustomer(double time);
Item customertime(long when);

int main()
{
    Queue line;
    Item temp;
    int hours;
    int perhour;
    long cycle, cyclelimit;
    int turnaways=0;
    long wait_time=0;
    long line_wait=0;
    long served=0;
    long sum_line=0;
    double min_per_cust;
    long customers;
    
    
    Initializequeue(&line);
    srand((unsigned int)time(0));
    puts("Case study:Sigmund Lander's Advice Booth");
    puts("enter the number of simulated hours:");
    scanf("%d",&hours);
    cyclelimit=MIN_PER_HOUR*hours;
    puts("Enter the average number of customers per hour:");
    scanf("%d",&perhour);
    min_per_cust=MIN_PER_HOUR/perhour; //一个顾客来的时间间隔 
    
    
    for(cycle=0;cycle<cyclelimit;cycle++)
    {
             if(newcustomer(min_per_cust))
          {
                if(Queueisfull)
                  turnaways++;
                else
                {
                        customers++;
                        temp=customertime(cycle);
                        Enqueue(temp,&line);
                }
          }
                
        if(wait_time<0&&!Queueisempty(&line))
        {
            Dequeue(&line,&temp);
            wait_time=temp.processtime;
            line_wait+=cycle-temp.arrive;
            served++;
        }
        if(wait_time>=0)
          wait_time--;
        sum_line+=Queuecount(&line); 
                
       }
    
    if(customers>0)
    {
        printf("customers accepted: %ld\n",customers);
        printf("customers served: %d\n");
        printf("turnaways:%ld\n",turnaways);
        printf("average queue size:%.2f\n",
        (double)line_wait/cyclelimit);
        printf("average wait time :%.2f minutes\n",
        (double)line_wait/served);
}
        else puts("no customers");
        Emptythequeue(&line);
        puts("bye");        
        
    
    return 0;
}
bool newcustomer(double x)
{
    if(rand()*x/RAND_MAX<1)
      return true;
    else 
        return false;
}

Item customertime(long when)
{
    Item cust;
    cust.arrive=when;
    cust.processtime=rand()%3+1;
    return cust;
}

请问这里为什么segmentation fault(应该是Dequeue函数的问题?)

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。