原来代码:
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 而条件没有更改的话,很容易崩溃。
以上。