I want to sort a link list, everything is right but it has run-time error and I don't know where is the problem!

here is the code:
Code:
struct student
{
	char name[20];
	int ID;
}*start, *cur, *temp;
Code:
	struct student *p, *k, *PB, *PF, *KB, *KF;
	int n = 1;

	temp = start;
	while(temp != cur)
	{
		n++;
		temp = temp->FL;
	}

	for(int i = 0; i < n; i++)
	{
		for(p = start; p->FL != cur->FL; p = p->FL)
		{
			for(k = p->FL; k != cur->FL; k = k->FL )
			{
				if (p->ave > k->ave && k != p->FL)
				{
					PB = p->BL;
					PF = p->FL;
					KB = k->BL;
					KF = k->FL;
					PB->FL = k;
					PF->BL = k;
					KB->FL = p;
					KF->BL = p;
					p->FL = KF;
					p->BL = KB;
					k->FL = PF;
					k->BL = PB;
				}
				else if (p->ave > k->ave && k == p->FL)
				{
					PB = p->BL;
					KF = k->FL;
					PB->FL = k;
					KF->BL = p;
					p->FL = KF;
					p->BL = k;
					k->FL = p;
					k->BL = PB;
				}
			}
		}
	}