AILXX_EXJ 2021-10-02 20:55 采纳率: 100%
浏览 17
已结题

队列入队总出现Segmentation fault,不知道这段代码该怎么改


#include  <iostream>
using  namespace  std;

template  <class  DataType>
struct  node{
        DataType  data;
        node<DataType>*  next;
};

template  <class  DataType>
class  cirLinkQueue{
public:
        cirLinkQueue();
        cirLinkQueue(DataType  a[],int  n);
        void  enQueue(DataType  elem);
        bool  deQueue();
        void  printQueue();
private:
        node<DataType>*  rear;
};

template  <class  DataType>
cirLinkQueue<DataType>::cirLinkQueue()
{
        rear  =  NULL;
}

template  <class  DataType>
cirLinkQueue<DataType>::cirLinkQueue(DataType  a[],int  n)
{
        if(n  ==  1){
                rear  =  new  node<DataType>;
                rear->data  =  a[0];
                rear->next  =  rear;
        }
        else{
                rear  =  new  node<DataType>;
                rear->data  =  a[0];
                rear->next  =  rear;
                for(int  i=1;i<n;++i){
                        node<DataType>*  s  =  new  node<DataType>;
                        s->data  =  a[i];
                        s->next  =  rear->next;
                        rear->next  =  s;
                        rear  =  s;
                }
        }
}

template  <class  DataType>
void  cirLinkQueue<DataType>::enQueue(DataType  elem)
{
     node<DataType> *s = NULL;
     s = new node<DataType>;
     s->data=elem;
     s->next=rear->next;
     rear->next=s;
     rear=s;

}

template  <class  DataType>
bool  cirLinkQueue<DataType>::deQueue()
{
      DataType x;
      node<DataType> *p=NULL;
      if(rear ==rear->next) throw"下溢";
      p = rear->next->next;
      x=p->data;
      rear->next->next=p->next;
      if(p==rear)rear = rear->next;
      delete p ;
      return x;
}

template  <class  DataType>
void  cirLinkQueue<DataType>::printQueue()
{
        if(rear  ==  NULL)
                cout<<"Empty"<<endl;
        else{
                node<DataType>*  p  =  rear->next;
                while(p  !=  rear){
                        cout<<p->data<<"  ";
                        p  =  p->next;
                }
                cout<<p->data<<endl;
        }
}
int  main()
{
        cirLinkQueue<int>  Q;
        int  m,n;
        cin>>m;
        while(m--){
                int  elem;
                cin>>elem;
                Q.enQueue(elem);
        }
        cin>>n;
        while(n--){
                bool  res  =  Q.deQueue();
                if(!res)  break;
        }
        Q.printQueue();
        return  0;
}

img

  • 写回答

1条回答 默认 最新

  • 拂面清风三点水 2021-10-02 23:56
    关注

    使用默认构造函数的时候,rear没有初始化,后面访问肯定段错误撒

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 创建了问题 10月2日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类