Opened 5 years ago
Last modified 4 years ago
#288 assigned ожидаются исправления
WW #4
Reported by: | Артём Сон | Owned by: | Vasily Alferov |
---|---|---|---|
Component: | WW_mergesort | Version: | 3.0 |
Keywords: | Cc: |
Description
Там пусто.
Change History (4)
comment:1 Changed 5 years ago by
Version: | 1.0 → 2.0 |
---|
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Вижу, что не работает. Первые ошибки тебе расскажет компилятор, там всё более-менее понятно.
Тут пока 0/10, как минимум потому, что не компилируется. Но лови подсказки про то, как исправлять неочевидные ошибки, которые у тебя неизбежно возникнут.
Про сам mergesort:
malloc(sizeof(array) / 2)
: посколькуarray
— этоvoid*
, тоsizeof(array) == 8
. Тут нужно пользоватьсяelements
иelement_size
, по-другому не выйдет никаким образом.temp1[i] = array[i]
: пытаешься скопировать void, конечно, так не работает. Нужноmemcpy
.temp1[i] <= temp2[j]
: это то место, где нужно воспользоваться компаратором.
Стиль:
- Пробел после скобок? Не надо, выглядит так себе. Тем более, что он у тебя не везде.
comment:3 Changed 4 years ago by
Version: | 2.0 → 3.0 |
---|
comment:4 Changed 4 years ago by
Ну вот, опять не компилируется =(
$ make gcc -c -g -Iinclude -Wall -Wextra -Werror -fsanitize=address src/main.c -o obj/main.o gcc -c -g -Iinclude -Wall -Wextra -Werror -fsanitize=address src/mergesort.c -o obj/mergesort.o src/mergesort.c: In function ‘merge’: src/mergesort.c:34:24: error: dereferencing ‘void *’ pointer [-Werror] if (comparator(&array[left + l], &array[middle + r]) < 0){ ^ ... и ещё 10 таких же ошибок
Нельзя разыменовывать войд, нужно заменить на арифметику указателей.
Конкретно про твои баги:
- В
merge
не обновляешьr
в первом цикле. - Также помни про арифметику указателей: когда делаешь операции с void*, она работает в количествах байт: кое-где нужно какие-то части выражений домножить на element_size.
После фикса этих багов твой искусственный пример работает.
И не забывай: некрасиво мешать табы с пробелами.
Note: See
TracTickets for help on using
tickets.
Оно не работает