我正在尝试创建一个泡泡对数字进行排序并不断出现分段错误的函数。有什么建议吗?
void bubblesort(struct Record *ptr, int records, int (*fcomp)(const void *, const void *))
{
long c, d, i;
struct Record *sa, *sb, sc;
for (c = 0 ; c < ( records - 1 ); c++)
{
for (d = 0 ; d < records - c - 1; d++)
{
for(i = 0; i < records - 1; i++)
{
if (fcomp(ptr+i, ptr+i+1) <= 0)
{
/* Swapping */
sc = sa[d];
sa[d] = sb[d+1];
sb[d+1] = sc;
}
}
}
}
}
答案 0 :(得分:2)
访问sa
,sb
时的未定义行为。
sc = sa[d];
sa[d] = sb[d+1];
sb[d+1] = sc;
都是非法的,因为它们只是悬挂指针。
struct Record *sa, *sb
没有为sa
和sb
分配任何内存,即使你这样做了,我也看不出它是如何相关的。无论如何,它们都包含伪造价值。