Segmentation fault

The code shows segmentation fault just after first pair of input (x,y). Help needed!!

#include <stdio.h>

struct points
{
	int x,y;
	struct points *next;
};
struct points *head=NULL;

void insert (struct points *temp)
{
	struct points *tem=head,*prev=head;
	if (head==NULL)
		head=temp;
	else
	{
		while (tem!=NULL)
		{
			if (tem->x<temp->x)
			{
				prev=tem;
				tem=tem->next;
			}
			else if (tem->x==temp->x)
			{
				while (tem->x==temp->x)
				{
					if ((tem->y)<(temp->y))
					{
						prev=tem;
						tem=tem->next;
					}
					else if (tem->y==temp->y)
					       return;
					else
					{
						//flag=1;
						break;
					}
				}
				temp->next=prev->next;
				prev->next=temp;
				return;
			}
			else
				break;
		}
		temp->next=prev->next;
		prev->next=temp;
		return;

	}
}

void print (int i)
{    
	if (i==1)
		printf("After 1st insertion:");
    else if (i==3)
    	printf("After 2nd insertion:");
    else if (i==3)
    	printf("After 3rd insertion:");
    else 
    	printf("After %dth insertion:",i);
    struct points *tem=head;
    while (tem!=NULL)
    {
		printf("%d,%d",tem->x,tem->y);
		tem=tem->next;
		if (tem!=NULL)
			printf("->");
	}

}

int main()
{
	int x,y,i=0;
	scanf("%d %d",&x,&y);
	i++;
	while (x!=0 && y!=0)
	{
		struct points *temp;
		temp->x=x;
		temp->y=y;
		temp->next=NULL;
		insert(temp);
		print(i);
		scanf("%d %d",&x,&y);
		i++;
	}
}

temp is an uninitialised pointer so this is Undefined Behaviour.

1 Like

thanks . Working now