3
구조체 목록을 반환하는 재귀 함수가 있습니다.재귀 함수 반환 목록의 세그먼트 오류
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);
원인이 오류를 분할 및 I 이유는 확실하지 않다 여기
struct Neighbour_node{
int index;
double dist;
};
그리고
는 기능입니다. 내 잘못한 것과 유사한 선으로 예를 보았는데 그것은 틀린 것은 아닙니다. 하지만 이러한 함수는 재귀가 아니므로 문제가있는 곳을 추측하고 있습니다. 게다가 k = 0 (함수의 한 호출 만 - 재귀가 아닌 것처럼) 일 경우 충돌이 발생하지 않습니다. 누구든지 이걸 도와 줄 수 있니? 감사합니다.
'particle'의 값이'hair'의 범위를 벗어나는 지 확인해 보셨습니까? – GWW
최소한의 완전한 예를 통해 많은 추측을 줄일 수 있습니다. – Beta
@ GWW 감사합니다. 당신 말이 맞았습니다. 나는 처음에 그것을 점검했다고 생각했지만, 가장 깊은 재귀 단계 (k == 0)에서만 점검이 수행된다는 것을 몰랐습니다. 지금 일하고있다. – user2327838