Привет У меня есть следующий код:Invalid чтения размера 4
struct Edge
{
Node * nodeA, * nodeB;
int weight;
};
.
.
Это typedef'd просто Край в другом месте.
.
.
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)»? – paulsm4
Valgrind, как правило, довольно описательный. Он, как правило, указывает точное место ошибки. Можете ли вы опубликовать соответствующую часть отчета Valgrind? – Jay
Не могли бы вы разместить достаточно кода для компиляции? –