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

原来代码:

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

以上。

 

阅读更多
上一篇程序调试日志
下一篇windows 的线程与消息
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭