nb1232 2022-02-07 21:30 采纳率: 100%
浏览 42
已结题

【HELP】使用c++编写直接插入排序时遇到的问题

问题遇到的现象和发生背景

学习c++做一个小项目的过程中,其中的一个排序模块遭遇了程序崩溃的问题,经过排查解决了问题,但是其中原因我无法找到。

问题相关代码
  worker *tmp=NULL;
    int j,i;
   for( i=1;i<this->workernum;i++){
     
      if(this->workerarray[i]->num<this->workerarray[i-1]->num){
          
          tmp=this->workerarray[i];
          cout<<this->workerarray[i]->num<<endl;
         for( j=i-1;this->workerarray[j]->num>tmp->num &&j>=0  ;j--){
             this->workerarray[j+1]=this->workerarray[j];
         }
         this->workerarray[j+1]=tmp; 
      }
   }
    }

可见,只是一个直接插入排序。其中workerarray为类中指针数组,num为类中变量,个人认为关系不大。

运行结果及报错内容

我所发现的错误代码在

  for( j=i-1;this->workerarray[j]->num>tmp->num &&j>=0  ;j--)

将其中条件j>=0与this->workerarray[j]->num>tmp->num交换后程序正确

for( j=i-1;j>=0&& this->workerarray[j]->num>tmp->num ;j--)

我想要达到的结果

所以,为什么会发生这样的问题,原因是什么,希望大家可以帮助我。

  • 写回答

3条回答 默认 最新

  • [PE]经典八炮 2022-02-07 21:39
    关注

    这是一个C++的基础知识啊,&&的短路效应,&&运算符会先计算第一个表达式,如果不成立,不会再计算第二个表达式。具体到你的程序中,如果j>=0放在前面,这样如果j<0,就不会判断this->workerarray[j]->num>tmp->num,而如果j>=0放在后面,当j<0时,会先计算this->workerarray[j]->num>tmp->num,j是负数,所以就异常了。
    别忘了采纳一下,谢谢

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

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染