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
'если (tempNode == NULL) {} еще {...' 'проверить перед while (tempNode! = NULL) 'избыточно. – EOF
in 'while (nextNode! = NULL) {if (nextNode-> item item) smallestNode = nextNode-> next;', 'nextNode-> next' может быть' NULL', в результате чего 'smallestNode' будет 'NULL' после этого. Я бы сказал, что строка нарушения должна быть «smallestNode = nextNode». –
EOF
@EOF Иисус Христос, не мог видеть эту маленькую ошибку. Спасибо – Aaron