2012-04-04 193 views
0

我们在图像处理项目中使用Blodshed Dev-C++。我们正在视频帧上实施连接组件标签。我们必须使用递归函数递归很多次以至于我们得到一个计算器。我们如何能有更大的堆栈大小?是否有可能通过一些链接器参数或类似的东西来改变它?如何在Bloodshed Dev-C++中增加堆栈大小?

void componentLabel(int i,int j,IplImage *img){ 
    // blueFrame = img->imageData[i*3*width+j*3]; 
//  greenFrame = img->imageData[i*3*width+j*3+1]; 
//  redFrame = img->imageData[i*3*width+j*3+2]; 

    if(!(img->imageData[i*3*width+j*3]==0 && img->imageData[i*3*width+j*3+1]==0 && img->imageData[i*3*width+j*3+2]==0) ){ 
      //printf("iffffff aq\n"); 
      return;  
    } 
    else{ 
      //printf("else aq %d\n",sayac_label);       
       img->imageData[i*3*width+j*3]=1; 

       new_object.pixel_count=new_object.pixel_count+1; 
       new_object.total_row=new_object.total_row+i; 
       new_object.total_col=new_object.total_col+j; 

       if(j<width-1){     
         componentLabel(i,j+1,img);       
       }    
       if(j>0){     
         componentLabel(i,j-1,img);     
       }    
       if(i<height-1){ 
         if(i>new_object.bottom.satir){ 
           new_object.bottom.satir=i; 
           new_object.bottom.sutun=j;            
         } 

         componentLabel(i+1,j,img);       
       }    
       if(i>0){ 
         if(i<new_object.top.satir){ 
           new_object.top.satir=i; 
           new_object.top.sutun=j;            
         }     
         return componentLabel(i-1,j,img);    
       }  
    } 
+0

请告诉我你使用的是最新版本的DevC++而不是5年前的版本。 – Mysticial 2012-04-04 19:48:16

+0

dev-C++ 4.9.9.2 – 2012-04-04 19:49:56

+0

facepalm ....... – Mysticial 2012-04-04 19:51:11

回答

1

只有一个办法将保证你不会用完堆栈大小 - 重新制定的算法是尾递归(并确保你的编译器优化尾调用 - 通常是-O3(或-02? )优化标志)。

简而言之,您是否增加了shell授予您的任务的最大堆栈大小?

ulimit -s <maximum stack size>