+ -
当前位置:首页 → 问答吧 → 编译都没问题就是执行时其中一个判断语句说非法接入

编译都没问题就是执行时其中一个判断语句说非法接入

时间:2011-12-12

来源:互联网

C/C++ code
UINT CDetect::PadCompare(void* TobeExamBit,void* StandarBit, BITMAPINFO* DibInfo,UINT m_PadPass,UINT m_HolePass,UINT m_HoleMove,CRect PadRect,CRect HoleRect)
{    
    unsigned char * lpSrcStandard;                        // 指向源标准图像的指针
    unsigned char * lpSrcDefect;
    UINT lLineBytes=(DibInfo->bmiHeader.biBitCount) * (DibInfo->bmiHeader.biWidth);
    //UINT TOTAL=lLineBytes*(DibInfo->bmiHeader.biHeight);
    int DefectCount=0;
    UINT StandardCount=0;
    UINT DifferentCount=0;
    UINT MovePix=0;
    UINT SHoleCount=0;
    UINT DHoleCount=0;
    UINT DetectResult=0;
    UINT Hundred=100;
    UINT PadRectSize=PadRect.Height() * PadRect.Width();
    UINT HoleRectSize=HoleRect.Height() * HoleRect.Width();
    
//    lpSrcStandard=(unsigned char *)TobeExamBit+20000;
    
//    BYTE n=*lpSrcStandard;

    for(int i=0;i<PadRect.Height();i++)    
    {    
        for(int j=0;j<PadRect.Width();j++)
        {
            lpSrcDefect=(unsigned char *)TobeExamBit + lLineBytes * (PadRect.top - 1 - i) + 4 * ( PadRect.left + j );
             if((BYTE)0 == *(lpSrcDefect+1) )
            {
                DefectCount++;
            }
            lpSrcStandard=(unsigned char *)StandarBit + lLineBytes * (PadRect.top - 1 - i) + 4 * ( PadRect.left + j );
            if((BYTE)0 == *lpSrcStandard)
            {
                StandardCount++;
            }
        }
    }


源程序比较大分析不过来,是一个读取DIB进行判断的函数。老是在if((BYTE)0 == *(lpSrcDefect+1) )这里出错。想不懂为什么。图是32位的。

作者: darkwhitesnow   发布时间: 2011-12-12

有没有越界?

作者: ouyh12345   发布时间: 2011-12-12

热门下载

更多