2013-04-30 4 views
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 (함수의 한 호출 만 - 재귀가 아닌 것처럼) 일 경우 충돌이 발생하지 않습니다. 누구든지 이걸 도와 줄 수 있니? 감사합니다.

+3

'particle'의 값이'hair'의 범위를 벗어나는 지 확인해 보셨습니까? – GWW

+0

최소한의 완전한 예를 통해 많은 추측을 줄일 수 있습니다. – Beta

+0

@ GWW 감사합니다. 당신 말이 맞았습니다. 나는 처음에 그것을 점검했다고 생각했지만, 가장 깊은 재귀 단계 (k == 0)에서만 점검이 수행된다는 것을 몰랐습니다. 지금 일하고있다. – user2327838

답변

0

os에서 스택 크기를 확인하십시오.

ulimit -s

나는 그것이 스택 때문이라고 제안합니다. 필요한 스택이 빠르게 증가하면 빠르게 증가하는 것처럼 보입니다.

우리가 볼 자세한 내용은 "머리카락"을 보여주십시오.