数组循环中赋值时,出现错误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这么大 你那样写肯定越界
[解决办法]
嗯 的确数组越界了