【发布时间】:2015-03-24 13:00:46
【问题描述】:
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;
}
}
不知道为什么会产生段错误,应该没有对 NULL 的编辑。
Segmentation fault. 0x00000000004008d4 in List_sort (headRef=0x7fffffffe458) at list.c:130 130 tempNode->item = smallestNode->item;
有谁知道它为什么这样做?
更新: 执行了建议并且没有更多的段错误,但是没有正确排序。
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
【问题讨论】:
-
if(tempNode == NULL) {} else {...在while(tempNode != NULL)之前的检查是多余的。 -
在
while (nextNode != NULL){ if (nextNode->item < smallestNode->item) smallestNode = nextNode->next;中,nextNode->next可能是NULL,导致smallestNode之后变成NULL。我会说有问题的行应该是smallestNode = nextNode。 -
@EOF jesus christ,看不到那个小错误。谢谢
-
绊倒的总是那些小的...
-
是否有理由不将其关闭为“离题,琐碎的错字”?
标签: c sorting pointers linked-list