博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DEBUG(2)--函数的输入参数要做适当的检查
阅读量:6604 次
发布时间:2019-06-24

本文共 1628 字,大约阅读时间需要 5 分钟。

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

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="<
<

  其中PositionId()函数实现如下

//返回一个位置上棋子的id,如果该位置上没有棋子,返回-1int 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="<<

  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;    }}

转载于:https://www.cnblogs.com/Manual-Linux/p/9770490.html

你可能感兴趣的文章
【转】UIView 的 autoresizingMask 属性
查看>>
HashMap常用方法
查看>>
HTML5之画布的拖拽/拖放
查看>>
[Gradle] Gradle 构建 android 应用常见问题解决指南
查看>>
安卓-PC-Arduino3方通信实现
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
查看>>
Android下的Junit测试
查看>>
swift3.0:sqlite3的使用
查看>>
[Git] Git把Tag推送到远程仓库
查看>>
【字符串处理算法】字符串包含的算法设计及C代码实现【转】
查看>>
【目录】开源Math.NET基础数学类库使用总目录
查看>>
Angular遇上CoffeeScript - NgComponent封装
查看>>
C++重要知识点小结---1
查看>>
[游戏模版1] MFC最小框架(base function including)
查看>>
javax.validation.ValidationException: Unable to create a Configuration
查看>>
word排版汇总
查看>>
【web JSP basePath】basePath的含义
查看>>
dos命令批处理发送文字到剪贴板
查看>>
Elasticsearch增删改查 之 —— Delete删除
查看>>
OK335xS 256M 512M nand flash make ubifs hacking
查看>>