Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归函数返回列表中的分段错误_C++_List_Recursion_Segmentation Fault - Fatal编程技术网

C++ 递归函数返回列表中的分段错误

C++ 递归函数返回列表中的分段错误,c++,list,recursion,segmentation-fault,C++,List,Recursion,Segmentation Fault,我有一个递归函数,它返回一个结构列表 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<Neig

我有一个递归函数,它返回一个结构列表

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;
}
导致分割错误,我不确定原因。我看到过与我的错误行相似的示例,似乎没有错。但是这些函数不是递归的,所以我猜这就是问题所在——此外,当k=0时(一个函数只有一个调用——因此好像它不是递归的),那么它就不会崩溃。有人能帮我吗?
谢谢

检查操作系统中的堆栈大小

ulimit-s

我认为这是因为堆栈。 因为您需要的堆栈似乎增长很快


显示您的“头发”以了解更多细节。您是否尝试过检查
粒子
的值是否超出
头发的界限
?您可以通过一个最小的完整示例为我们节省大量猜测。@GWW谢谢,您是对的,我以为一开始就检查过了,但我没有意识到,检查将仅在最深的递归步骤(k==0)中执行。它现在正在工作。
temp_neighbours = findNewNeighbours(original,hair[particle].neighbours[i],k - 1);