【发布时间】:2019-04-22 16:09:26
【问题描述】:
我为 qsort 做了一个比较函数,它导致了分段错误。 为什么会发生这种情况以及如何解决?
example my two arrays are:
G->grades = [2,3,3,2,2,2]
G->order = [0,2,3,4,5,6]
我想使用 G->grades 值对 G->order 进行排序。所以输出应该是:G->order = [2,3,0,4,5,6]
u32* vert_grades;
char OrdenWelshPowell(Grafostv* G)
{
vert_grades = G->grades;
qsort(G->order, G->n, sizeof(u32), comp_grades);
return 0;
}
int comp_grades(const void *v1, const void *v2) {
u32 degree1 = vert_grades[*(const u32 *)v1 - 1];
u32 degree2 = vert_grades[*(const u32 *)v2 - 1];
printf("degree2: %u\n", vert_grades[*(const u32 *)v2 - 1]);
if (degree1 > degree2)
{
return -1;
}
else if (degree1 < degree2)
{
return 1;
}
else
{
return 0;
}
}
pd:我暂时不想订购 G->等级。
【问题讨论】:
-
哪一行导致了段错误?
-
你好!请发布显示问题的Minimal, Complete, and Verifiable example。这还应该显示您正在使用的
#include文件和struct定义。 -
嗨,我相信它可以是这条线:
c u32 degree2 = vert_grades[*(const u32 *)v2 - 1];是否有可能-1执行类似vert_grades[-1]的操作,如果*(const u32 *)v2 = 0 -
你告诉我们你在那个数组里放了什么:是
0...还是1...?但是读者可以用来复制问题的 MCVE 会证明这一点。 -
@WeatherVane 马上
标签: c segmentation-fault compare qsort