首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组循环中赋值时,出现异常CXX0030

2012-04-08 
数组循环中赋值时,出现错误CXX0030一个图像处理中的程序的一部分,C/C++ codeint GrayTrans::GenerateMatri

数组循环中赋值时,出现错误CXX0030
一个图像处理中的程序的一部分,

C/C++ code
int GrayTrans::GenerateMatrix(void){    //释放图像纯数学矩阵的指针    if(m_pImgMatrix!=NULL){        delete []m_pImgMatrix;        m_pImgMatrix=NULL;    }    //分配空间,为了简便,统一采用一维数组    m_nBitCountOut=m_nBitCount;    m_imgWidthOut=m_imgWidth;    m_imgHeightOut=m_imgHeight;    m_pImgMatrix=new unsigned char[m_imgWidthOut * m_imgHeightOut]();    //图像每行像素所占字节数,必须是4的倍数    int lineByteOut=(m_imgWidthOut*m_nBitCountOut/8+3)/4*4;    //为数组的每一个成员赋值    for(int i=0;i<m_imgWidthOut;i++)        for(int j=0;j<m_imgHeightOut;j++)            *(m_pImgMatrix+i*m_imgWidthOut+j*m_imgHeightOut)=*(m_pImgData+i*lineByteOut+j);//像素值    return 0;}

错误在最后一个for循环出现,debug时发现到i=99,j=291时,出现了错误*(m_pImgMatrix+i*m_imgWidthOut+j*m_imgHeightOut)CXX0030: 错误: 无法计算表达式的值。输出中显示 0xC0000005: 写入位置 0x03db8054 时发生访问冲突
我的环境是win7,vs2010.
m_pImgMatrix是GrayTrans类的public成员。在构造函数中为NULL。我觉的我在这个地方定义m_pImgMatrix,也已经初始化为0 了。应该没啥问题了,但还是出错,谢谢!


[解决办法]
输出中显示 0xC0000005: 写入位置 0x03db8054 时发生访问冲突 是不是越界了
[解决办法]
m_pImgMatrix=new unsigned char[m_imgWidthOut * m_imgHeightOut]();
这里 new 少了, 应该是
lineByteOut * m_imgHeightOut 才够.
[解决办法]
m_pImgMatrix+i*m_imgWidthOut+j*m_imgHeightOut 应该改为 m_pImgMatrix+i*j
你的m_pImgMatrix只分配了m_imgWidthOut*m_imgHeightOut这么大 你那样写肯定越界
[解决办法]
嗯 的确数组越界了

热点排行