我正在尝试按三个指针值y的升序对它们进行排序,我是新手,使用指针和指向指针的指针,所以我看不到导致执行中分段错误的错误
void sortpoints(coor **hptr, coor **mptr, coor **lptr)
{
coor **aux;
printf("c1 %f c2 %f c3 %f", (*hptr)->y, (*mptr)->y,(*lptr)->y);
if ((*hptr) -> y < (*mptr) -> y)
{
*aux = *hptr;
*hptr = *mptr;
*mptr = *aux;
}
if ((*mptr) -> y < (*lptr) -> y)
{
*aux = *mptr;
*mptr = *lptr;
*lptr = *aux;
}
if ((*hptr) -> y < (*mptr) -> y)
{
*aux = *hptr;
*hptr = *mptr;
*mptr = *aux;
}
}
这是呼叫,这些是主要的第一行,所以我相信错误不是因为其他
coor *hptr, *mptr, *lptr;
hptr = &(tptr -> p1);
mptr = &(tptr -> p2);
lptr = &(tptr -> p3);
sortpoints(&hptr, &mptr, &lptr);
printf("c1 %f c2 %f c3 %f", hptr->y, mptr->y,lptr->y);
预期的执行应该像一样
c1 10 c2 1 c3 400
c1 400 c2 10 c3 1
您声明了一个未初始化的指针
coor **aux;
所以像一样取消引用
*aux = *hptr;
调用未定义的行为。
你需要像一样声明指针
coor *aux;
并像一样为其赋值
aux = *hptr;