递归调用把栈给堆满了,有什么办法没?

void aa(HDC hdc,int x,int y)//i,bkcolor,usecolor为全局
{
unsigned int i=::GetPixel(hdc,x,y);
if(x<=140||x>=WinW||y>=WinH||y<0||bkcolor!=i||usecolor==i)
{
return ;
}
else if(bkcolor==i||usecolor!=i)
{
::SetPixel(hdc,x,y,usecolor);
aa(hdc,x+1,y);
aa(hdc,x,y+1);
aa(hdc,x-1,y);
aa(hdc,x,y-1);
}
}
我想用这个功能实现画板填充,但是填的内容太多了窗体就自动关了,我觉得好像是栈堆满了,各位大侠帮帮忙啊

作者: tan416966130   发布时间: 2011-06-16

获得画板的大小,然后遍历

作者: ouyh12345   发布时间: 2011-06-16

想办法用循环代替

作者: kyotrue   发布时间: 2011-06-16

改用非递归试试

作者: VisualEleven   发布时间: 2011-06-16

改非递归

作者: mengfeihong   发布时间: 2011-06-16

调整默认栈大小?或者在堆上分配临时变量?
不过如果递归次数太多估计也不照,毕竟函数调用要压栈

作者: shenyi0106   发布时间: 2011-06-16

void aa(HDC &hdc,int x,int y)

static unsigned int i=::GetPixel(hdc,x,y);

作者: yzm888   发布时间: 2011-06-16

首先你要明白为什么递归导致了你的堆栈溢出!

看你的代码就可以看出,在栈中你创建了unsigned int i。

疯狂的递归,这个4字节的增量让你栈满出,


考虑下unsigned int i是否可以用一个固定大小的成员容器来替代。

作者: chenjiawei007   发布时间: 2011-06-16

最好改成链栈

作者: First_Soul   发布时间: 2011-06-16

这个递归,貌似重复的处理太多,很有可能对同一个点重复设置了N次颜色

作者: tanghyes   发布时间: 2011-06-16