风险程序,查不出错在哪
#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],但是我实在不知道错在哪,请各位高手指点
[解决办法]
"elemType *Q=new elemType(MaxLength);" 应改为 Q=new elemType[MaxLength]; //方括号!
Q在这里不能重新声明,否则会覆盖类的Q;根本没有为Q申请到空间,只是为EnQueue的Q申请了空间。
还有哦!动态分配了内存,结束时是应该释放这些内存的。
[解决办法]
#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; }