Aaron
Aaron

Reputation: 1208

C : Singly linked list sorting segmentation fault

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;
        }   
}

Don't know why it's generating a seg fault, there should be no edits to NULL. Segmentation fault. 0x00000000004008d4 in List_sort (headRef=0x7fffffffe458) at list.c:130 130 tempNode->item = smallestNode->item; Anyone know why it's doing this?

Update: Performed the suggestions and no more seg fault, however does not sort correctly.

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

Upvotes: 2

Views: 176

Answers (1)

Klas Lindb&#228;ck
Klas Lindb&#228;ck

Reputation: 33273

This isn't right:

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

it should be:

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

Upvotes: 1

Related Questions