链表排序(for读取指针问题)出错,求大佬解惑

链表的排序函数,和我上一个提问都是使用了这种for循环读取指针然后对指针的值进行操作,都导致被操作的指针发生了越界错误,```
struct StuLink*Sort_Link(struct StuLink *list)
{
struct StuLink *p1,*p2,*p3=NULL;
for(p1=list;p1->next!=NULL;p1=p1->next)
for(p2=p1->next;p2!=NULL;p2=p2->next)
{
if(p1->cjcj)
{ p3->cj=p1->cj;
p3->xh=p1->xh;
p3->dj=p1->dj;
strcpy(p3->xm,p1->xm);

            p1->cj=p2->cj;
            p1->xh=p2->xh;
            p1->dj=p2->dj;
            strcpy(p1->xm,p2->xm);

            p2->cj=p3->cj;
            p2->xh=p3->xh;
            p2->dj=p3->dj;
            strcpy(p2->xm,p3->xm);
        }
    }
    Output_Link(list);
    return list;

}

贴上一次的while循环代码

//struct StuLink*Rank_Link(struct StuLink*list)
//{
// struct StuLink *p1,*p2;
// p1=list;
// for(;p1!=NULL ;p1=p1->next)
// for(p2=list;p2!=NULL;p2=p2->next)
// {
// if(p1->xh==p2->xh)
// continue;
// if(p1->cjcj)
// p1->mc++;
// }
// return list;
//}

朋友,没看到代码里哪有while,不都是for循环码?
还有你的错误是什么,error是什么贴出来
还有你的中文表述请在说详细点,中文语法再琢磨下。没读懂你想问什么