+ -
当前位置:首页 → 问答吧 → 二维Otsu阈值分割法,发生内存不能“read”,求解答!

二维Otsu阈值分割法,发生内存不能“read”,求解答!

时间:2011-12-07

来源:互联网

应用程序错误
“0x0040411a”指令引用的“0x001ae000”内存。该内存不能为“read”。
[code=C/C++][/code]
[align=left]
for(i=0;i<wide;i++)
{
for(j=0;j<height;j++)
{
pixel = *(p_data + wide*i + j); // 
pixel0= *(p_data1+ wide*i + j);
lpDst = temp1 + wide*i + j;  
if(pixel<=tr1&&pixel0<=tr2) //tr1和tr2为两个阈值  
{  
  *lpDst=0;  
}  
else  
{  
*lpDst=255;  
}  
}
}
  //复制图像  
  memcpy(p_data, temp1, wide*height);  
  //释放内存  
  delete temp1;
}
定义及内存分配:
long pixel=0;
long pixel0=0;
LPBYTE p_data; 
LPBYTE p_data1;
LPBYTE lpDst;
LPBYTE temp1;
temp1=new BYTE[wide*height];
memset(temp1,255,wide*height);


在网上也查了下,有的说是指针访问错误,内存没有释放干净,或访问了野指针,类释放了,然后又去调用这个类就会产生这样的错误等等等。
反复看了几遍还是没找出来是哪里错误。
把断点放在循环的后面,单步调试只能运行到这个循环里面。
求帮助,感谢感谢感谢啊!

作者: greatliudy123   发布时间: 2011-12-07

LPBYTE p_data;  
LPBYTE p_data1;


你这两个分配内存了吗?

作者: flydreamGG   发布时间: 2011-12-07

引用 1 楼 flydreamgg 的回复:
LPBYTE p_data;
LPBYTE p_data1;


你这两个分配内存了吗?

分配了,
p_data = GetData();
p_data1 = GetData();
这两句,忘贴出来了!

作者: greatliudy123   发布时间: 2011-12-07