void CMy3DShowImageView::RegionGrow()
{
CClientDC dc(this);
CDC* pDC=&dc;
CMy3DShowImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int Image[256][256];
int put[256*256];
COLORREF color; struct DATA
{
int data;
        int flag;
}; DATA p[256*256]; int i;
int j;
int k;//循环控制变量
int nWidth=256;
int nHeight=256;
int nWidthStep=256;    for(int m=0;m<256;++m)
{//将每片数据存入image数组
for(int n=0;n<256;++n)
Image[m][n]=*(*(pDoc->IntigrateData+m_slice)+n+m*256);
} if (!pDoc)
return; CRect rect;
GetClientRect(rect);
int center_x,center_y;

center_x=rect.left + rect.Width()/2;
center_y=rect.top + rect.Height()/2;

CPoint pt;
static int nDx[]={-1,0,1,0};
static int nDy[]={0,1,0,-1}; //种子点
int nSeedX=nWidth/2;
int nSeedY=nHeight/2;
//定义栈,存储坐标
int *GrowStkX;
int *GrowStkY; GrowStkX=new int[nWidth*nHeight];
GrowStkY=new int[nWidth*nHeight];
//定义栈的起点和终点
int nStart=0;
int nEnd=0; //初始化
GrowStkX[nEnd]=nSeedX;
GrowStkY[nEnd]=nSeedY; //当前正在处理的像素
int nCurrX;
int nCurrY; for(j=0;j<256;j++)
{
for(i=0;i<256;i++)
{
put[i+256*j]=Image[j][i];
p[j*256+i].data=put[j*256+i];
p[j*256+i].flag=0;
}
}
while(nStart<=nEnd)
{
nCurrX=GrowStkX[nStart];
nCurrY=GrowStkY[nStart]; for(k=0;k<4;k++)
{
i=nCurrX+nDx[k];
j=nCurrY+nDy[k];

if((i<nWidth)&&(i>=0)&&(j<nHeight)&&(j>=0)&&(p[j*256+i].flag==0)&&abs(p[i+256*j].data-p[nCurrY*256+nCurrX].data)<80)
{
nEnd++;
pt.y=center_y+j; 
pt.x=center_x+i;
GrowStkX[nEnd]=i;
GrowStkY[nEnd]=j;
p[j*256+i].data=255; color=RGB(255,0,0);
p[j*256+i].flag=1;
pDC->SetPixel(pt,color);
}

}
nStart++;
} delete[]GrowStkX;
delete[]GrowStkY;
GrowStkX=NULL;
GrowStkY=NULL;
}此程序运行可以运行,但是单击相关按钮之后弹出错误:unknow software exception,只有将处理结构体的那部分注掉之后才不会弹错,各位大侠给看看,到底哪里有错啊,在线等!!!

解决方案 »

  1.   

    我调试过了,显示是stack overflow,但是我把那些关于栈的全部注掉,还是会显示那个错误,刚才发现定义那个结构体好像有错,
             struct DATA
    {
    int data;
            int flag;
    };
    DATA p[256*256]; 我把它的大小改成63600运行就没有错,63700还会弹错  数组还有上界啊?
      

  2.   

    请注意65535这个数字,这是16Bit整数的上限,看看你的整数使用是不是出了问题,最好使用实数解决问题。一个写软件的人应该对这些256、1024、65535等数字敏感些。
      

  3.   

    最好使用长整数或int32解决问题。
      

  4.   

    Image[m][n]=*(*(pDoc->IntigrateData+m_slice)+n+m*256);
    请问这一句中pDoc->IntigrateData与m_slice各指什么呀,最好把他们的定义粘出来
    或者你把写的这个区域生长的项目发过来吧,谢谢了,我急需
    [email protected]