2013-04-30 58 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

我建议这是因为堆栈。 使你所需要的堆栈看起来迅速增加。

显示您的“头发”的更多细节,让我们看到。