У меня есть рекурсивная функция, возвращающая список структур.Ошибка сегментации в возвращаемом рекурсивной функции
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;
}
Line:
temp_neighbours = findNewNeighbours(original,hair[particle].neighbours[i],k - 1);
причины сегментации вины, и я не знаю, почему. Я видел примеры с строкой, подобной моей ошибочной, и, похоже, это не так. Но эти функции не были рекурсивными, поэтому я предполагаю, что проблема заключается в том, что при k = 0 (только один вызов функции - таким образом, как если бы он не был рекурсивным), то это не сбой. Может, пожалуйста, помогите мне с этим? Thanks
Вы пытались проверить, имеет ли значение 'particle' вне границ' hair'? – GWW
Вы можете сэкономить нам много догадок с минимальным полным примером. – Beta
@GWW Спасибо, вы были правы, мне казалось, что я проверил это в начале, но я не понял, что проверка будет выполняться только на самом глубоком этапе рекурсии (k == 0). Он работает сейчас. – user2327838