【发布时间】:2012-03-08 04:18:56
【问题描述】:
你好,我有以下代码:
struct Edge
{
Node * nodeA, * nodeB;
int weight;
};
.
.
这是 typedef'd 以简单地 Edge 其他地方。
.
.
int cmp(const void *b, const void *a)
{
Edge * e1 = (Edge*)a;
Edge * e2 = (Edge*)b;
printf(" %d++", getWeight(e1));
printf(" %d++", getWeight(e2));
if (getWeight(e1) != getWeight(e2))
return (getWeight(e1) < getWeight(e2)) ? -1 : 1;
return 0;
}
void sortEdges(Edge ** edgeList, int numEdges)
{
qsort(edgeList, numEdges, sizeof(Edge*), cmp);
}
Valgrind 告诉我,我有一个大小为 4 的无效读取,当我输出边缘权重的值时,我得到了完全出乎意料的结果。我只能得出结论,我对 Edge* 的演员阵容有问题,或者 sizeof 在某种程度上没有按照我的想法进行。如果您需要任何信息,请告诉我。
【问题讨论】:
-
你不想要“sizeof(struct Edge)”吗?
-
Valgrind 通常具有很强的描述性。它通常会指出错误的确切位置。你能发布 Valgrind 报告的相关部分吗?
-
你能发布足够的代码来编译吗?
-
您的代码对我来说看起来不错。我怀疑
edgeList的初始化是否有任何问题。顺便说一句,我建议您使用sizeof(edgeList[0])而不是sizeof(Edge*)。无论edgeList的类型如何,前者都有效。