修改C中过程void中的指针值



我正在尝试按三个指针值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;

相关内容

  • 没有找到相关文章

最新更新