2013-04-30 3 views
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; 
} 

Line:

temp_neighbours = findNewNeighbours(original,hair[particle].neighbours[i],k - 1); 

причины сегментации вины, и я не знаю, почему. Я видел примеры с строкой, подобной моей ошибочной, и, похоже, это не так. Но эти функции не были рекурсивными, поэтому я предполагаю, что проблема заключается в том, что при k = 0 (только один вызов функции - таким образом, как если бы он не был рекурсивным), то это не сбой. Может, пожалуйста, помогите мне с этим? Thanks

+3

Вы пытались проверить, имеет ли значение 'particle' вне границ' hair'? – GWW

+0

Вы можете сэкономить нам много догадок с минимальным полным примером. – Beta

+0

@GWW Спасибо, вы были правы, мне казалось, что я проверил это в начале, но я не понял, что проверка будет выполняться только на самом глубоком этапе рекурсии (k == 0). Он работает сейчас. – user2327838

ответ

0

Проверьте размер стека в os.

ULIMIT -s

Я полагаю, что это из-за штабеля. Становится необходимым быстро увеличивать стек.

Покажите свои «волосы» для более подробной информации для нас.

Смежные вопросы