今天在调试程序时发现,在单步运行的情况下,程序执行没有问题,但是直接运行就会出问题。出问题的代码如下

            for(int col=0;col<=9;++col)
{
int killid=PositionId(row,col);
if(sameColor(id,killid))
{
continue;
}
if(CanMove(id,row,col,killid))
{
i_canmove++;
qDebug()<<"i_canmove="<<i_canmove<<endl;
SaveStep(id,killid,row,col,steps1);
}
}

  其中PositionId()函数实现如下

//返回一个位置上棋子的id,如果该位置上没有棋子,返回-1
int DrawWidget::PositionId(int row,int col)
{
for(int i=0;i<32;i++)
{
if( (chess_man[i].row==row) && (chess_man[i].col==col) && (!chess_man[i].dead))
{
// qDebug()<<"id="<<i<<endl;
return i;
}
}
return -1;
}

  PositionId()的返回值在一个位置上没有棋子的情况下会返回-1

int killid=PositionId(row,col);

  即killid的值有可能是-1

  sameColor()函数实现如下

/*
* 描述:判断两个棋子的颜色是否相同
* 输入:待判断的两个棋子的ID
* 输出:无
* 返回值:false 不相同
* true 相同
* 其他:无
*/
bool DrawWidget::sameColor(int moveid, int killid)
{
if(chess_man[killid].red == chess_man[moveid].red)
{
//颜色相同
return true;
}
else
{
//颜色不同
return false;
}
}

当killid值为-1时,调用

                if(sameColor(id,killid))
{
continue;
}

  很明显,chess_man[killid].red变成了chess_man[-1].red,数组下标越界,导致程序执行出现了问题。

  修改后的sameColor()函数如下

/*
* 描述:判断两个棋子的颜色是否相同
* 输入:待判断的两个棋子的ID
* 输出:无
* 返回值:false 不相同
* true 相同
* 其他:无
*/
bool DrawWidget::sameColor(int moveid, int killid)
{
if(killid == -1)
{
return false;
}
if(chess_man[killid].red == chess_man[moveid].red)
{
//颜色相同
return true;
}
else
{
//颜色不同
return false;
}
}

最新文章

  1. UWP学习记录1-开端
  2. SQL Server CheckPoint的几个误区
  3. 有关lucene的问题
  4. 基于Qt的遥感图像处理软件设计总结
  5. (转载)Eclipse下配置Github环境 .
  6. Spring连接MySQL、Oracle和SQL Server的数据库运动连接属性
  7. putty保持连接不自动段开
  8. 大数据系列修炼-Scala课程01
  9. u-boot添加一个hello命令
  10. mac下sublime 配置使用markdown
  11. 关于MATLAB处理大数据坐标文件2017526
  12. Eclipse的优化
  13. Python3-初识面向对象
  14. zabbix实现电话、短信、邮件报警
  15. Object value iterator:值迭代器
  16. Nginx的虚拟主机
  17. leetCode题解之字符最短路径解法2
  18. jQuery学习- 内容选择器
  19. 【开发工具IDE】JAVA-eclipse使用汇集
  20. c#自定义控件窗体Click无法点击Lable的处理解决方案

热门文章

  1. django模板-if标签和for标签
  2. flask模板,路由,消息提示,异常处理
  3. P3813 [FJOI2017]矩阵填数(组合数学)
  4. TCP 之 RST 原因分析
  5. Spring Boot 整合Mybatis非starter时,mapper一直无法注入解决
  6. Bootstrap3基础 input-group-btn 按钮与输入框 横向组合
  7. Django框架(六) Django之模板继承
  8. bzoj2152: 聪聪可可 点分治
  9. codevs1017乘积最大
  10. Java 实现一个自己的显式锁Lock(有超时功能)