Я работаю в Интернете и стараюсь делать это весь день, но без успеха. Есть и другая тема с подобными проблемами, но я не могу заставить ее работать.Динамическое распределение массива структурных указателей, их указаний и qsort-ing
Это код:
void sort_structs_example(Stock **head, int count)
{
Stock **toSort = NULL;
int i;
memLoc(&toSort, sizeof(toSort)*count);
for (i = 0; count > 0 && i < count && (head != NULL); i++)
{
if (i == 0) toSort[0] = *head;
else
{
toSort[i] = toSort[i - 1]->next;
}
}
qsort(toSort, count, sizeof(Stock), struct_cmp_by_product);
for (i = 0; count > 0 && i < count && (head != NULL); i++)
{
printColor(-1, i, toSort[i]->name, 'G', 'B');
}
system("pause");
free(toSort);
}
int struct_cmp_by_product(const void *Ap, const void *Bp)
{
Stock A = *(Stock *)Ap;
Stock B = *(Stock *)Bp;
return strcmp((&A)->name, (&B)->name);
}
Stock является структура с «именем» переменной и «рядом» в нем. Параметр «count» получает количество текущих структур запаса. Параметр ** head - это указатель на последний добавленный запас, и я получаю доступ к другим запасам путем перехода (* head) -> next, это связанная структура.
Это memLoc:
int memLoc(void **var, int size)
{
if (NULL == (*var = malloc(size)))
{
return 0;
}
else return 1;
}
Так что я думаю, что я amn't используя memLoc право и что-то в состоянии QSort перепутались, но я запутался во всех указателей. Помоги пожалуйста? Благодарю.
Скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -Wextra -g'). Затем ** используйте отладчик ** ('gdb') –
Разбейте это на отдельные вопросы. Использование отладчика поможет на этом этапе, потому что, как написано, предоставленные вами фрагменты не будут скомпилированы. Вы получите предупреждения и ошибки. – ryyker