我在这里看过一些类似的东西,但这对我没有帮助。所以,无论我错在哪里,请纠正我。
#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
分段错误(核心转储)
请帮帮我,如何解决这个问题
答案 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))
通过利用短路评估来确保安全。