我必須設計和實現一個Fortran例程來確定正方形格上的簇的大小,並且遞歸編寫子例程看起來非常方便。然而,每當我的晶格尺寸增長超過一定的值(大約200 /邊)時,子程序始終發生段錯誤。這是我的集羣檢測程序:Fortran遞歸分段錯誤
RECURSIVE SUBROUTINE growCluster(lattice, adj, idx, area)
INTEGER, INTENT(INOUT) :: lattice(:), area
INTEGER, INTENT(IN) :: adj(:,:), idx
lattice(idx) = -1
area = area + 1
IF (lattice(adj(1,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(1,idx),area)
IF (lattice(adj(2,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(2,idx),area)
IF (lattice(adj(3,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(3,idx),area)
IF (lattice(adj(4,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(4,idx),area)
END SUBROUTINE growCluster
其中ADJ(1,n)表示會場n,ADJ(2,n)的北鄰代表西部等。什麼會導致不規則的段錯誤行爲?對於大的晶格尺寸,集羣是否「太大」?
這絕對是一個堆棧溢出 - 我開始搞亂(低於最優)的ulimit -s選項,並「解決」了這個問題,但我認爲其他洪泛填充算法在長期跑。感謝您的鏈接! – 2010-04-15 13:26:38
應該有一個徽章在技術相關的環境中說'堆棧溢出' – lurscher 2010-08-13 19:20:57