2015-01-26 2 views
2
void List_sort (struct nodeStruct **headRef){ 
    struct nodeStruct *tempNode = *headRef; 
    struct nodeStruct *nextNode, *smallestNode; 
     while (tempNode != NULL){ 
      nextNode = tempNode->next; 
      smallestNode = tempNode; 
      while (nextNode != NULL){ 
       if (nextNode->item < smallestNode->item) { 
        smallestNode = nextNode->next; 
       } 
       nextNode = nextNode->next; 
      } 
      int tempInt = tempNode->item; 
      tempNode->item = smallestNode->item; 
      smallestNode->item = tempInt; 
      tempNode = tempNode->next; 
     } 
} 

Не знаю, почему он генерирует ошибку seg, не должно быть никаких изменений в NULL. Segmentation fault. 0x00000000004008d4 in List_sort (headRef=0x7fffffffe458) at list.c:130 130 tempNode->item = smallestNode->item; Кто-нибудь знает, почему это делается?C: Ошибка сегментации сортировки одиночного связывания

Обновление: Выполнено предложение, и не более, чем ошибка seg, однако не сортируется правильно.

Value: 1 
Value: 2 
Value: 7 
Value: 3 
Value: 4 
Value: 6 
Value: 5 
Value After Sort: 1 
Value After Sort: 2 
Value After Sort: 4 
Value After Sort: 3 
Value After Sort: 5 
Value After Sort: 6 
Value After Sort: 7 
+1

'если (tempNode == NULL) {} еще {...' 'проверить перед while (tempNode! = NULL) 'избыточно. – EOF

+2

in 'while (nextNode! = NULL) {if (nextNode-> item item) smallestNode = nextNode-> next;', 'nextNode-> next' может быть' NULL', в результате чего 'smallestNode' будет 'NULL' после этого. Я бы сказал, что строка нарушения должна быть «smallestNode = nextNode». – EOF

+0

@EOF Иисус Христос, не мог видеть эту маленькую ошибку. Спасибо – Aaron

ответ

1

Это не верно:

  if (nextNode->item < smallestNode->item) { 
       smallestNode = nextNode->next; 
      } 

должно быть:

  if (nextNode->item < smallestNode->item) { 
       smallestNode = nextNode; 
      }