风险程序,查不出错在哪

reiliu 2007-10-11 10:26:15


#include<iostream>
using namespace std;
#define MaxLength 6
typedef int elemType;

class Queue
{
public:
Queue();
int QueueLength();
void EnQueue(elemType e);
int DeQueue(elemType &e);

protected:
elemType *Q;
elemType front;
elemType rear;
elemType counter;
elemType a[MaxLength];


};


Queue::Queue()
{

elemType *Q = new elemType( MaxLength );
if(!Q)
return ;
front = rear=0;
counter = 0;
}


int Queue::QueueLength()
{
return counter;
}


void Queue::EnQueue(elemType e)
{
if(counter == MaxLength)
return ;
Q[rear] = e;
rear = (rear + 1)%MaxLength;
counter++;

}


int Queue::DeQueue( elemType &e)
{
if(counter == 0)
return 1;
e= Q[front];
front = (front + 1)%MaxLength;
counter--;
return e;
}

int main()
{
Queue a;
int Length = 0;
Length = a.QueueLength();
cout<<Length;
a.EnQueue(12);
int LE = 0;
LE = a.QueueLength();
cout<<LE;
return 0;
}


这是我数据结构实验上的题目,用VC6.0编译错误指向Q[rear] = e 和 e= Q[front],但是我实在不知道错在哪,请各位高手指点
...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
5311 2007-10-12
  • 打赏
  • 举报
回复

#include <iostream >
using namespace std;
#define MaxLength 6
typedef int elemType;

class Queue
{
public:
Queue();
virtual ~Queue(); //增加个析构函数
int QueueLength();
void EnQueue(elemType e);
int DeQueue(elemType &e);

protected:
elemType *Q;
elemType front;
elemType rear;
elemType counter;
elemType a[MaxLength];


};

Queue::Queue()
{
Q = new elemType[ MaxLength ]; //修改此处
if(!Q)
return ;
front = rear=0;
counter = 0;
}

Queue::~Queue()
{
if (Q)
{
delete [] Q;
}
}


int Queue::QueueLength()
{
return counter;
}


void Queue::EnQueue(elemType e)
{
if(counter == MaxLength)
return ;
Q[rear] = e;
rear = (rear + 1)%MaxLength;
counter++;

}


int Queue::DeQueue( elemType &e)
{
if(counter == 0)
return 1;
e= Q[front];
front = (front + 1)%MaxLength;
counter--;
return e;
}

int main()
{
Queue a;
int Length = 0;
Length = a.QueueLength();
cout <<Length;
a.EnQueue(12);
int LE = 0;
LE = a.QueueLength();
cout <<LE;
return 0;
}
peachswallow 2007-10-12
  • 打赏
  • 举报
回复
"elemType *Q=new elemType(MaxLength);" 应改为 Q=new elemType[MaxLength]; //方括号!

Q在这里不能重新声明,否则会覆盖类的Q;根本没有为Q申请到空间,只是为EnQueue的Q申请了空间。

还有哦!动态分配了内存,结束时是应该释放这些内存的。
reiliu 2007-10-12
  • 打赏
  • 举报
回复
elemType *Q = new elemType( MaxLength );
这里我想创建一个长度为MaxLength的循环队列;
FreeKid 2007-10-11
  • 打赏
  • 举报
回复
elemType *Q = new elemType( MaxLength );

这里你想分配啥?是不是写错了?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧