首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

风险程序,查不出错在哪解决方案

2012-03-25 
风险程序,查不出错在哪#includeiostreamusing namespace std#define MaxLength 6typedef int elemType

风险程序,查不出错在哪


#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申请了空间。

还有哦!动态分配了内存,结束时是应该释放这些内存的。

[解决办法]

C/C++ code
#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; } 

热点排行