忘川睡着了zZ 2023-02-08 21:53 采纳率: 66.7%
浏览 13
已结题

一修改m_Empnum的值就程序崩怎么回事


void add_emp()
        {
            cout << "请输入添加职工数量:";
            int addnum=0;
            cin >> addnum;
            if(addnum>0)
            {
                int newsize=this->m_Empnum+addnum;
                worker ** newspace=new worker*[newsize];
                if(this->m_Emparray!=NULL)
                {
                    for(int i = 0;i < m_Empnum;i++) 
                    {
                        newspace[i]=this->m_Emparray[i];
                    }
                }
                for(int i = 0;i <addnum ;i++) 
                {
                    int id;
                    string name;
                    int Deptid;
                    cout << "请输入第"<< i+1<<"个职工编号:";
                    cin >> id;
                    cout << "请输入第"<< i+1<<"个职工姓名:";
                    cin >> name;
                    cout<<"请输入第"<<i+1<<"个职工岗位"<<endl;
                    cout << "1.普通职工"<< endl;
                    cout << "2.经理"<< endl;
                    cout << "3.老板"<< endl;
                    cin >> Deptid;
                    
                   worker * wr=NULL;
                    switch(Deptid)
                    {
                        case 1:
                       wr=new Employaa(id,name,1);
                        break;
                        case 2:
                        wr=new manager(id,name,2);
                        break;
                        case 3:
                        wr=new Boss(id,name,3);
                        break;
                    }
                    newspace[this->m_Empnum+i]=wr;
                    //cout << m_Emparray<< endl;
                   delete[] this->m_Emparray;
                    
                   m_Emparray=newspace;
                   cout<<num<<endl;
                  // cout<<m_Empnum<<endl;
                   this->m_Empnum=newsize;
                    //worker *w=NULL;
                  //w=new  Boss(1,"张三",1);
                  cout << "成功添加"<< addnum<<"名员工"<<endl;
                }
  • 写回答

2条回答 默认 最新

  • 元气少女缘结神 2023-02-08 23:01
    关注

    假设m_Empnum=1,addnum=2;newspace的元素个数为newsize就等于二者之和3
    18行i = 0时,添加第一个人。运行到53行,m_Empnum=newsize=3。
    继续下一次for循环,此时i=2,运行到46行时,newspace[m_Empnum+i]也就是取[3+2]=[5] 这不越界崩溃吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费