请问一下为什么我写的程序中内存中的值会改变(有程序)
我写了个程序,其中有一段是将像数进行二值化,然后调用hough函数进行Hough变换,在Hough变换中的开头有一个判断语句,看二值化后的指针数组中是否还存在非0或255的像数,结果每次检测都说存在没有被二值化的像数。但奇怪的是在二值化结束后在调试里面看到明明所有的都已经被二值化了。像数发生变化则是在进行
int * lpTransArea = (int *)new int[lWidth*lHeight*iMaxR];//变换域计数器
这个语句后,本来指针数组中显示第15580个像数的值是0,但是在经过这个语句以后就变成了32。请问有没有谁能解释一下是什么原因? 有没有可能是内存泄露之类的。
附上这一段程序:
q = 1;n=1;
for (int i = 0; i < m_nHeight3; i++)
{
for (int j = 0; j < w3[q]; j++)
{ //m_pCutmap[n][j+i*w3[q]]是一个指针数组,里面存放的是图片的像数 //n=1表示是第二副图片
if (m_pCutmap1[n][j+i*w3[q]] < 120)//二值化的过程
m_pCutmap1[n][j+i*w3[q]] = 0;
else
m_pCutmap1[n][j+i*w3[q]] = 255;
}
}
unm_pCutmap1[1][15580] = 0; //我专门把这个值给初始化为0
for ( i=0; i < MAX_SIZE; i++) //对m_pCutmap1进行强制转换
{
unm_pCutmap1[i] = (char *)m_pCutmap1[i];
}
BOOL res;
//下面的就是调用的Hough变换的函数
res = HoughCircleDisp(unm_pCutmap1, MAX_SIZE, w3[q] , m_nHeight3, q);
if (res)
{
flag7 = true;
Invalidate();
}
HoughCircleDisp(LPSTR lpDIBBits[],int n, LONG lWidth, LONG lHeight, int k)
{ //n是数组的MAX_SIZE,lWidth是图片的宽,lHeight是图片的高,
int lLineBytes = ((lWidth * 8)+31) / 32 *4 ; // 图像每行的字节数
int iMaxR;//最大半径
if(lWidth <lHeight) //这些都没有什么问题,主要是设一些变量值
iMaxR=(int)(lWidth/2);
else
iMaxR=(int)(lHeight/2);
int iMaxAngleNumber = 360;//角度从0-360,每格1度[lWidth*lHeight*iMaxR];
/*问题就出在了接下来的这一行,到现在为止,unm_pCutmap1[1][15580] 和 lpDIBBits[1][15580]的值是0,但是经过了下面这一行后就变成了32*/
int * lpTransArea = (int *)new int[lWidth*lHeight*iMaxR];
memset((BYTE*)TransArea, 0, lWidth*lHeight*iMaxR*sizeof(int));
int iAngle,x,y,r;//变换域的坐标
.
.
.
.
.
//后面还一些程序,但没什么影响,主要可能是出在前面
}
[解决办法]
有点像什么东西写超过之类的。。。