2012-03-31 107 views
0

我在C#項目A中編寫了一個DFS(深度優先搜索)函數,它運行正常。然後我創建一個新的C#項目B,它的代碼行數比A多。當我在項目B中使用相同的輸入數據運行相同的函數時,我的VS2008顯示出現堆棧溢出錯誤。在C#中更改堆棧的大小

我可以在C#中更改堆棧的大小嗎?

該功能的名稱是:FindBlocksFounction()。

代碼造成堆棧溢出:

int tempx = nowx + dir[i, 0]; 
int tempy = nowy + dir[i, 1]; 
if (tempx < 0 || tempy < 0 || tempx >= m_Bitmap.Height || tempy >= m_Bitmap.Width) 
    continue; 
int next; 
next = PointList.FindIndex(t => 
{ 
    if (t.x == tempx && t.y == tempy) 
     return true; 
    else 
     return false; 
});//It seems like that FindIndex() in List<> costs some stack room. 
if (next == -1) 
    continue; 

if (color[next] == 0) 
{ 
    FindBlocksFounction(next); 
} 
+5

你能告訴我們導致問題的方法的代碼嗎?也許它可以修復。增加堆棧大小隻會延長你的痛苦。 – Tudor 2012-03-31 07:25:48

回答

2

我覺得你深度優先搜索算法遞歸轉換爲使用隊列/出列收集最好的方式。這不是一項複雜的任務。只是谷歌它或看看這裏:
Non recursive Depth first search algorithm

它會阻止你的代碼堆棧大小問題的任何數據量。