| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1385 人关注过本帖
标题:求助!关于c++程序并产生一个访问违例(段异常)的问题
只看楼主 加入收藏
celine6781
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-5
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
求助!关于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");
}
搜索更多相关主题的帖子: 主程序 include 异常 
2012-10-05 23:28
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
看看是不是内存非法访问
2012-10-06 16:48
celine6781
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-10-5
收藏
得分:0 
回复 2楼 寒风中的细雨
我已经无力吐槽了……
换了两台电脑重新执行。其中一台和我的电脑出现一样的问题,另外一台电脑可以执行,但是会比较卡。
高手指教。我要晕了……
2012-10-07 10:11
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
程序代码:
template<class ElemType>
SqStack<ElemType>::SqStack(int size)
// 操作结果:构造一个最大容量为size的空栈
{
    maxSize = size;                        // 栈的最大容量
    //if (elems != NULL) delete []elems;    // 释放已有存储空间
    elems = new ElemType[maxSize];        // 分配新的存储空间
    top = 0;
}
2012-10-14 00:06
快速回复:求助!关于c++程序并产生一个访问违例(段异常)的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.162156 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved