救命求救!!谁帮我分析分析下面这段代码为什么会发生————————————堆栈溢出————————
//模板匹配的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;
}
}
}