Hiding.who 2021-09-03 07:30 采纳率: 83.3%
浏览 22
已结题

为什么进行Dequeue操作时出现degmentation fault ,感觉应该Enqueue或者Dequeue的问题 着重看这两段就好了

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

int main()
{
    Queue line;
    Item *temp;
    char ch;
    Initializequeue(&line);
    puts("enter a to add a letter ");
    puts("enter d to delete a letter");
    puts("enter a q to quit");
    while((ch=getchar())!='q')
         { 
            if(ch=='a')
               {    
                   if(!Queueisfull(&line))
                     {
                       puts("enter an integer");
                          Enqueue(&line);
                        }
                       else puts("full!!!");
               }
            else if(ch=='d')
                 {
                     if(Queueisempty(&line))
                       puts("nothing to delete!");
                     else
                         {
                             if(Dequeue(&line,temp)==false)
                               puts("Delete error");
                             else
                                 printf("%d has been deleted",*temp);
                        }
                 }
            printf("%d left now\n",Queuecount(&line));
            puts("enter a to add a letter ");
            puts("enter d to delete a letter");
            puts("enter a q to quit");
            while(getchar()!='\n')
                 continue;
            
         }
    Emptythequeue(&line);
    puts("bye!");
    return 0;
}

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

#define MAXQUEUE 10

typedef int 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(Queue* pq);
bool Dequeue(Queue* pq,Item *pitem);
void Emptythequeue(Queue* pq);
#endif 

#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(Queue* pq) //pq是一个指向Queue的指针   Node*是一个指向Node的指针  
{                       //关联是Queue->front指向一个Node的结构 
    Node* pt;         
    pt=(Node*)malloc(sizeof(Node));
    scanf("%d",&pt->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++;
};
bool Dequeue(Queue* pq,Item *pitem)
{
    if(Queueisempty(pq))
      return false;
    *pitem=pq->front->item;
    Node* p=pq->front->next;
    free(pq->front);
    pq->front=p;
    pq->items--;
    return true;
}
void Emptythequeue(Queue* pq)
{
    Item dummy;
    while(!Queueisempty(pq))
         Dequeue(&dummy,pq);
}

为什么进行Dequeue操作时出现degmentation fault ,感觉应该Enqueue或者Dequeue的问题 着重看这两段就好了

  • 写回答

2条回答 默认 最新

  • Hiding.who 2021-09-03 14:15
    关注

    解决了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月11日
  • 已采纳回答 9月3日
  • 创建了问题 9月3日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址