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時(只有一個函數調用 - 就好像它不是遞歸的),它不會崩潰。任何人都可以幫我解決這個問題嗎? 謝謝
您是否試過檢查'particle'是否具有'hair'範圍之外的值? – GWW 2013-04-30 23:23:45
您可以用最少的完整示例爲我們節省很多猜測。 – Beta 2013-04-30 23:57:19
@GWW謝謝,你說得對,我以爲我在開始時檢查過它,但我沒有意識到,檢查只會在最深的遞歸步驟(k == 0)中執行。它正在工作。 – user2327838 2013-05-01 07:25:37