【问题标题】:C : Singly linked list sorting segmentation faultC:单链表排序分段错误
【发布时间】: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-&gt;item = smallestNode-&gt;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-&gt;item &lt; smallestNode-&gt;item) smallestNode = nextNode-&gt;next;中,nextNode-&gt;next可能是NULL,导致smallestNode之后变成NULL。我会说有问题的行应该是smallestNode = nextNode
  • @EOF jesus christ,看不到那个小错误。谢谢
  • 绊倒的总是那些小的...
  • 是否有理由不将其关闭为“离题,琐碎的错字”?

标签: c sorting pointers linked-list


【解决方案1】:

这是不对的:

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

应该是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多