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 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常