vc程序运行过程中出现某条指令引用内存,该内存不能为读?求大侠指点。。。 5

boolCTestView::OnMirror1(){CTestView::OnOpenImage();//功能:水平镜像//判断图像是否打开,没打开,则弹出提示框并退出... bool CTestView::OnMirror1()
{
CTestView::OnOpenImage();
//功能:水平镜像
//判断图像是否打开,没打开,则弹出提示框并退出函数
if(!m_dib.m_pDib)
{
AfxMessageBox("图像还没打开,请先打开图像!");
return FALSE;
}
int nw=m_dib.GetWidth();
int nh=m_dib.GetHeight();
int i,j;
HLOCAL hBits;
LPSTR IpSrc=NULL;
LPSTR IpDst=NULL;
LPSTR IpBits=NULL;
hBits=LocalAlloc(LHND,nw);
if(hBits==NULL)
{
return FALSE;
}
IpDst=(char*)LocalLock(hBits);
for(i=0;i<nh;i++)
for(j=0;j<nw/2;j++)
{
//对图像的第i行、第j列的象素的灰度信息进行修改
IpSrc=(char*)m_dib.m_pDibBits[i*nw+j];
IpBits=(char*)m_dib.m_pDibBits[(i+1)*nw-j];
*IpDst=*IpBits; //单步调试到这里有问题,Unhandled exception in TEST:0xC0000005:Access Violation.
*IpBits=*IpSrc;
*IpSrc=*IpDst;
}
//将修改的m_pdata的数据赋值给m_pDibBits,以显示修改的结果
m_dib.UpdateData();
//刷新屏幕
Invalidate();
LocalUnlock(hBits);
LocalFree(hBits);
return TRUE;
}
展开
 我来答
xazhuyuchen
2012-08-06 · TA获得超过403个赞
知道小有建树答主
回答量:278
采纳率:100%
帮助的人:105万
展开全部
程序没有看,出现内存不能读,一般都是数组引用时读取了不存在的位置,本来数组只有10个大小,程序若读取第11个元素,就会报出类似错误,建议检查:
m_pDibBits[i*nw+j]
这样的地方,单步来,看是否越界了。
追问
IpSrc=(char*)m_dib.m_pDibBits[i*nw+j];
IpBits=(char*)m_dib.m_pDibBits[(i+1)*nw-j];
*IpDst=*IpBits; //单步调试到这里有问题,Unhandled exception in TEST:0xC0000005:Access Violation
这是什么意思 我是菜鸟 还希望能详细点 谢谢大侠!
追答
猜想应该是IpBits=(char*)m_dib.m_pDibBits[(i+1)*nw-j];
这句数组越界了,你看看报错是i、j的值,算一下(i+1)*nw-j是否在图像的像素范围内。
再具体只能看程序,呵呵。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式