分段故障

时间:2014-06-26 06:24:39

标签: c data-structures linked-list segmentation-fault singly-linked-list

将节点添加到升序有序链表

我在这里看过一些类似的东西,但这对我没有帮助。所以,无论我错在哪里,请纠正我。

        #include<stdio.h>
        #include<stdlib.h>
        struct node
        {
          int data;
          struct node* link;
        };
         struct node* head = NULL;
        void add(int);
        void print();
        int main()
        {
          add(1); print();
          add(2); print();
          add(5); print();
          add(4); print();
          add(3); print();
        return 0;
        }
***/* if list is empty or if new node is to be inserted before the first node*/***
         void add( int num)
        {  
           struct node* temp;
           temp =  head;
           struct node* newNode = (struct node*)malloc(sizeof(struct node));
           newNode->data = num;
           newNode->link = NULL;
           if((head == NULL)||( head->data > num))
               {
                 newNode->link = head;
                 head = newNode;
               }
           else
              {
  ***/* traverse the entire linked list to search the position to insert the new node*/***
               while(temp!=NULL)
               {
                if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))
                    {
                       newNode->link = temp->link;
                       temp->link = newNode;
                       return;
                    }
                  temp= temp->link;
                }
               }
             }
    ***/*Display the content of the linked list*/***    
          void print()
        {
           struct node* temp;
           temp = head;
           while(temp!=NULL)
            {
              printf("%d", temp->data);
              temp=temp->link;
            }
           printf("\n");
        }

运行此代码o / p时:

1

分段错误(核心转储)

请帮帮我,如何解决这个问题

1 个答案:

答案 0 :(得分:4)

罪魁祸首就是这条线:

if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))

在评估之前,您没有检查temp->link是否NULL。将其更改为:

if(temp->data <= num && ( temp->link == NULL || temp->link->data > num))

通过利用短路评估来确保安全。