程序调试日志-有符号 无符号

本文介绍了一个因类型不匹配导致循环无法正确终止的问题,并给出了修改方案。通过将循环变量从无符号整型改为有符号整型,解决了循环超出预期范围引发的程序崩溃。

原来代码:

    UINT size=m_vecContent.size();
    UINT i;
    UINT nTotalHeight=0,nTempHeight=0,nContentWndHeight=RECT_H(&m_rtData);;
    for(i=size-1;i>=0;i--)
    {
        myword_row *pRow = m_vecContent[i];
        nTempHeight = CalcLineHeight(m_vecContent[i]);
        nTotalHeight+=nTempHeight;
        if(nTotalHeight>nContentWndHeight)
        {
            return i+1;
        }
    }

i 为无符号型 和 0 比较总是>=0,所以当 (int)i <0 的时候其实 要结束循环,但是继续执行,程序崩溃。

 

后改为

  UINT size=m_vecContent.size();
    int i;
    UINT nTotalHeight=0,nTempHeight=0,nContentWndHeight=RECT_H(&m_rtData);;
    for(i=size-1;i>=0;i--)
    {
        myword_row *pRow = m_vecContent[i];
        nTempHeight = CalcLineHeight(m_vecContent[i]);
        nTotalHeight+=nTempHeight;
        if(nTotalHeight>nContentWndHeight)
        {
            return i+1;
        }
    }

即 改正问题。

因为 在程序中很多地方个数都用 无符号整型表示,我们在循环的时候如果要保持一致的话(为了不引起警告,有符号和无符号的比较),我们如果采用 UINT 而条件没有更改的话,很容易崩溃。

以上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值