2013-04-30 55 views
3

我有一個遞歸函數,即返回一個結構列表。遞歸函數返回列表中的分段錯誤

struct Neighbour_node{ 
    int index; 
    double dist; 
}; 

這裏是功能:

list<Neighbour_node> findNewNeighbours(int original, int particle, int k){ 
    Neighbour_node node; 
    list<Neighbour_node> neighbours; 
    list<Neighbour_node> temp_neighbours; 
    list<Neighbour_node>::iterator iterator; 

    if (k <= 0){ 
     if (particle == -1){ 
      node.index = -1; 
      node.dist = 1000.0; 
     } 
     else{ 
      node.index = particle; 
      node.dist = glm::length(hair[original].position - hair[particle].position); 
      neighbours.push_back(node); 
     } 
    } 
    else { 
     for (unsigned int i = 0; i < hair[particle].neighbours.size(); i++){ 
      temp_neighbours = findNewNeighbours(original,hair[particle].neighbours[i],k - 1); 

      temp_neighbours.sort(compareNeighbour_node); 
      neighbours.merge(temp_neighbours,compareNeighbour_node); 
     } 
    } 
    return neighbours; 
} 

線:

temp_neighbours = findNewNeighbours(original,hair[particle].neighbours[i],k - 1); 

原因分段錯誤,我不知道爲什麼。我看過與我的錯誤行相似的例子,看起來沒有錯。但是這些函數並不是遞歸的,所以我猜測這就是問題所在 - 除了當k = 0時(只有一個函數調用 - 就好像它不是遞歸的),它不會崩潰。任何人都可以幫我解決這個問題嗎? 謝謝

+3

您是否試過檢查'particle'是否具有'hair'範圍之外的值? – GWW 2013-04-30 23:23:45

+0

您可以用最少的完整示例爲我們節省很多猜測。 – Beta 2013-04-30 23:57:19

+0

@GWW謝謝,你說得對,我以爲我在開始時檢查過它,但我沒有意識到,檢查只會在最深的遞歸步驟(k == 0)中執行。它正在工作。 – user2327838 2013-05-01 07:25:37

回答

0

檢查您的操作系統的堆棧大小。

ulimit -s

我建議這是因爲堆棧。 使你所需要的堆棧看起來迅速增加。

顯示您的「頭髮」的更多細節,讓我們看到。