救命求救!!谁帮我分析分析下面这段代码为什么会发生————————————堆栈溢出————————
//模板匹配的SSDA算法;//目标图像的像素总数
long lTotalpixel = lTemplateHeight * lTemplateWidth;//随机像素的位置
double RandNum;
long RandHeight;
long RandWidth;//不变的阙值,用于比较
double CompValue = 5000.0;//存储每个起始像素的相应与阙值比较得出的最小像素数;
long TempArray[1000][1000];
memset(TempArray,0,sizeof(TempArray));//种随机数
srand( (unsigned)time( NULL ) );//取出目标图像(匹配图)的像素平均值
dSigmaT = 0;
for(n = 0; n < lTemplateHeight; n++)
{
for(m = 0; m < lTemplateWidth; m++)
{
lpTemplteSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * n + m;
templatepixel = (unsigned char)*lpTemplateSrc;
dSigmaT += (double)templatepixel;
}
}
//目标图象的像素平均值
dSigmaT /= lTotalpixel; //开始搜索
MaxR = 0.0;
for(i = 0; i < lHeight - lTemplateHeight + 1; i++)
{
for(j = 0; j < lWidth - lTemplateWidth + 1; j++)
{
dSigmaST = 0;
dSigmaS = 0;
//相应起始像素为(i,j)时的匹配区域像素平均值
for(n = 0; n < lTemplateHeight; n++)
{
for(m = 0; m < lTemplateWidth; m++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * (i + n) + m + j;
pixel = (unsigned char)*lpSrc;
dSigmaS += (double)pixel;
}
}
//当前像素起始位的区域像素平均值
dSigmaS /= lTotalpixel;
//取区域内的随机像素,计算绝对误差
for(n = 0; n < 2 * lTotalpixel; n++)
{
//取随机像素的位置高度和宽度
RandNum = (double)rand();
RandNum *= ((double)lTotalpixel/32767.0);
RandHeight = (long)RandNum / lTemplateWidth;
RandWidth = (long)RandNum % lTemplateWidth;
//随机像素对应的源图像位置
lpSrc = (char *)lpDIBBits + lLineBytes * (i + RandHeight) + m + RandWidth;
pixel = (unsigned char)*lpSrc;
//随机像素对应的目标图象的位置
lpTemplteSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * RandHeight + RandWidth;
templatepixel = (unsigned char)*lpTemplateSrc;
//累加各随机像素的绝对误差(就是匹配区域和目标图像的相关性参数)
dSigmaST += (pixel - dSigmaS - dSigmaT + templatepixel);
//当误差值大于给定阙值时,跳出循环,并记录此时的随机数的次数
if(dSigmaST > CompValue)
{
n = 2 * lTotalpixel;
}
//随机像素计数
TempArray[i][j]++;
}
//保存最大计数时的像素起始位置,作为匹配结果的像素起始位置
if(nMax < TempArray[i][j])
{
nMax = TempArray[i][j];
lMaxHeight = i;
lMaxWidth = j;
}
}
}
//模板匹配的SSDA算法;//目标图像的像素总数
long lTotalpixel = lTemplateHeight * lTemplateWidth;//随机像素的位置
double RandNum;
long RandHeight;
long RandWidth;//不变的阙值,用于比较
double CompValue = 5000.0;//存储每个起始像素的相应与阙值比较得出的最小像素数;
long TempArray[1000][1000];
memset(TempArray,0,sizeof(TempArray));//种随机数
srand( (unsigned)time( NULL ) );//取出目标图像(匹配图)的像素平均值
dSigmaT = 0;
for(n = 0; n < lTemplateHeight; n++)
{
for(m = 0; m < lTemplateWidth; m++)
{
lpTemplteSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * n + m;
templatepixel = (unsigned char)*lpTemplateSrc;
dSigmaT += (double)templatepixel;
}
}
//目标图象的像素平均值
dSigmaT /= lTotalpixel; //开始搜索
MaxR = 0.0;
for(i = 0; i < lHeight - lTemplateHeight + 1; i++)
{
for(j = 0; j < lWidth - lTemplateWidth + 1; j++)
{
dSigmaST = 0;
dSigmaS = 0;
//相应起始像素为(i,j)时的匹配区域像素平均值
for(n = 0; n < lTemplateHeight; n++)
{
for(m = 0; m < lTemplateWidth; m++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * (i + n) + m + j;
pixel = (unsigned char)*lpSrc;
dSigmaS += (double)pixel;
}
}
//当前像素起始位的区域像素平均值
dSigmaS /= lTotalpixel;
//取区域内的随机像素,计算绝对误差
for(n = 0; n < 2 * lTotalpixel; n++)
{
//取随机像素的位置高度和宽度
RandNum = (double)rand();
RandNum *= ((double)lTotalpixel/32767.0);
RandHeight = (long)RandNum / lTemplateWidth;
RandWidth = (long)RandNum % lTemplateWidth;
//随机像素对应的源图像位置
lpSrc = (char *)lpDIBBits + lLineBytes * (i + RandHeight) + m + RandWidth;
pixel = (unsigned char)*lpSrc;
//随机像素对应的目标图象的位置
lpTemplteSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * RandHeight + RandWidth;
templatepixel = (unsigned char)*lpTemplateSrc;
//累加各随机像素的绝对误差(就是匹配区域和目标图像的相关性参数)
dSigmaST += (pixel - dSigmaS - dSigmaT + templatepixel);
//当误差值大于给定阙值时,跳出循环,并记录此时的随机数的次数
if(dSigmaST > CompValue)
{
n = 2 * lTotalpixel;
}
//随机像素计数
TempArray[i][j]++;
}
//保存最大计数时的像素起始位置,作为匹配结果的像素起始位置
if(nMax < TempArray[i][j])
{
nMax = TempArray[i][j];
lMaxHeight = i;
lMaxWidth = j;
}
}
}
解决方案 »
- wsm 为什么标题栏处理消息的时候不能调用父类的啊?
- 怎样获得某一个进程所调所有线程的起始地址?
- 请问怎样不使用hook去监控一个进程
- 麻烦帮忙分析一下,我的程序的CPU使用率为什么会‘逐步’增高,直到100% ?
- 程序启动前的判断
- 望有SDK for Win98/95的兄弟能提供两个文件,不胜感激
- 自己开发的ActiveX控件,在程序中不用DDX_Control绑定,如何使用它?
- 简单问题,在线等到,立即结贴.------->得到一个图标得句柄(HICON),怎样把该图标保存到一个图标文件里面
- 求VC中32/64位系统的判断方法
- 如何制作Text To Speech引擎?? 急征相关资料、技术帮助!(关键字:tts 引擎 agent)
- 我已经学了一点vc的API,现在想学MFC,该怎么办
- 关于消息函数,这样的友元声明为什么是错误的?
long (* pTempArray)[1000] = new long[1000][1000];
改回来之后也就搞定了,其中还有几个地方拼错了,
不过
thx:~!