2014-02-13 5 views
0

У меня есть эта функция, которая проверяет, находятся ли узлы в связанном списке физически рядом друг с другом, байт с переменными start_byte и end_byte. Но моя функция сохраняет segfault, и я не уверен, почему, может ли кто-нибудь предложить помощь?Функция объединителя узлов связанного списка

void checkIfFreeTogether(void) 
{ 
    FREEPTR l =freelist; 
    FREEPTR f = freelist; 
    FREEPTR g =freelist; 
    int i = 0; 

     while(f->next!=NULL) 
    { 

     if(f->end_byte+1==f->next->start_byte) 
     { 
        cout << f << endl; 

     f->size = f->size + f->next->size; 
       cout << f << endl; 

     f->end_byte = f->next->end_byte; 
       cout << f << endl; 
       cout << f->next << endl; 


     f->next=f->next->next; 

       cout << f << endl; 
       cout << f->next << endl; 

     } 

      f=f->next;   

    }  

} 

здесь является выход этой конкретной функции, то couts используется для отладки и показывать значения

0x200583a8 
0x200583a8 
0x200583a8 
0x20058438 
0x200583a8 
0 
Segmentation fault (core dumped) 

ответ

1

Возможно f->next->next равна нулю в этом:

  f->next=f->next->next; 

      cout << f << endl; 
      cout << f->next << endl; 

тогда:

  f=f->next; 

и while аварий на следующей итерации

так что ваш while должно быть:

  while(f && f->next) 

вы отлаживать его?

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