求助!关于c++程序并产生一个访问违例(段异常)的问题
编译通过。执行时出现停止运行的情况。调试后说“程序并产生一个访问违例(段异常)”。不知道怎么改啊。错的那行我加注释了。这个是主程序。还有的东西已经确定没错。放在附件里了(其中两个main是示例程序哦)。谢谢各位大侠啦!!!
项目二.rar
(7.1 KB)
程序代码:
#include "assistance.h" #include "sq_stack.h" #include "link_queue.h" main(void) { int n,plaque,tin,conl,i,j1=0,j2=0,nin=0,x; int k,y,p,z,nbk=0; int away_time[80],away_plaque[80]; //存放离开车辆的已停时间以及离开车辆的车牌。 char etat[80]; LinkQueue<int> TEM; //等候便道,以队列实现;且等候便道不需要记录时间。 cout<<"请输入停车场容量:n="; //设置停车场容量 cin>>n; x=n; cout<<endl; //system("PAUSE"); SqStack<int> MAIN(n); // 从这里开始错误!!停车场记录车牌,以栈实现。 SqStack<int> TIME(n); //停车场纪录进入时间,以栈实现。 SqStack<int> QUIT(n); //存放暂时退出车辆车牌,以栈实现。 SqStack<int> QUIT_time(n); //存放暂时退出车辆的进入时间,以栈实现。 cout<<"您要对几辆车进行操作?"<<endl; cin>>conl; for (i=0;i<=conl;i++){ away_time[i]=0; //将两个数列初始化为0,作为后面的判断条件。 away_plaque[i]=0; } for (i=0;i<conl;i++){ cout<<"您所操作的第"<<(i+1)<<"辆汽车到达或离去?(A/D):"<<endl; cin>>etat[i]; cout<<"请输入汽车牌照号码:"<<endl; cin>>plaque; if (etat[i]=='A'&&x==n){ //未溢出栈的情况。入停车场。 cout<<"请输入当前时间:"<<endl; cin>>tin; MAIN.Push(plaque); TIME.Push(tin); j1++; //j1记录进入停车场的车辆个数 if (MAIN.Length()==x) x++; } cout<<endl<<endl<<endl<<endl; if (etat[i]=='A'&&x>n){ //栈已满。进入等候便道。 cout<<"您需要在等候便道等候。"<<endl; TEM.EnQueue(plaque); j2++; //(j2-1)记录进入等候便道车辆个数 } if (etat[i]=='D'){ //车辆离去 nbk++; //nbk,退出停车场的车辆个数,即停车场空位个数 。用于计算在等候便道可以进入停车场的数量 for (k=1;;k++){ //k的值是暂时退出车辆的数量(包含出停车场那辆) MAIN.Pop(y); QUIT.Push(y); //for语句使车辆暂时退出。 if (y==plaque) break; } QUIT.Pop(y); //取出要离去车辆 away_plaque[i]=y; // 记录其车牌,便于后面打印。 for (p=1;p<=k;p++){ //for语句对进入停车场的时间做相同的操作。 TIME.Pop(z); QUIT_time.Push(z); } QUIT_time.Pop(z); //cout<<z; away_time[i]=(tin-z); //记录离去车辆在停车场内停留时间 } for (p=1;p<k;p++){ //将暂时出栈的元素重新放回去。QUIT和QUIT_time两个栈变空。 QUIT.Pop(y); MAIN.Push(y); QUIT_time.Pop(z); TIME.Push(z); } } //QUIT.Traverse(Write<int>); //MAIN.Traverse(Write<int>); // TEM.DelQueue(plaque); j2--; cout<<"请将待停车辆依次停靠在:"; //打印待停车辆的情况 cout<<endl<<endl; for (i=1;i<=j1;i++){ cout<<" 停车场第"<<i<<"号车位"<<endl; cout<<endl; } for (i=1;i<=j2;i++){ cout<<" 等候便道第"<<i<<"号车位"<<endl; cout<<endl; } for (i=0;i<=conl;i++){ //打印离开车辆的情况 if (away_time[i]!=0&&away_plaque[i]!=0){ cout<<"车牌号为"<<away_plaque[i]<<"的汽车"<<"已停车"<<away_time[i]<<"分钟"<<endl; if (away_time[i]<=15) cout<<"请付款"<<3<<"元"; else if (away_time[i]>15&&away_time[i]<=180) cout<<"请付款"<<6<<"元"; else if (away_time[i]>180&&away_time[i]<=300) cout<<"请付款"<<10<<"元"; else cout<<"请付款"<<20<<"元"; } } cout<<endl<<endl; for (i=1;i<=nbk;i++){ //若停车场有空位了,让等候便道的车进入停车场并打印 TEM.GetHead(y); MAIN.Push(y); cout<<"请等候便道第"<<i<<"辆车("<<y<<")进入停车场"<<endl; cout<<"请输入当前时间:"<<endl; cin>>tin; TIME.Push(tin); } system("PAUSE"); }