关闭

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

394人阅读 评论(0) 收藏 举报

原来代码:

    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 而条件没有更改的话,很容易崩溃。

以上。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:78610次
    • 积分:1431
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:5篇
    • 译文:2篇
    • 评论:41条
    最新评论