Opened 5 years ago
Closed 4 years ago
#324 closed ожидается проверка (задача сдана)
WW #4
Reported by: | Milyausha Sabirova | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_mergesort | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (8)
comment:1 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:3 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Не работает сортировка строк из условия:
{lab_04}[2114]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04 Updating '.': At revision 1629. {lab_04}[2115]$ make mkdir obj gcc -c -Wall -Wextra -Werror -Iinclude -fsanitize=address src/mergesort.c -o obj/mergesort.o gcc -c -Wall -Wextra -Werror -Iinclude -fsanitize=address src/main.c -o obj/main.o gcc obj/mergesort.o obj/main.o -o lab_04 -fsanitize=address {lab_04}[2116]$ ./lab_04 str foo bar bazooka baz foo bar bazooka baz
За другие пройденные тесты +2.
По коду: реализация mergesort
с точностью до скобок, имен переменных и вынесения функции merge совпадает с решением #281.
Раз так получилось, что решения совпали и в реализации есть недочеты, а ваше решение я проверяю позже, вы должны будете исправить перечисленные замечания для получения полного балла:
- main.c - храните данные для сортировки в динамической памяти, а не в массиве переменной длины (
array
) (+2 балла); - mergesort.c - реализуйте
mergesort
, используя один вызов функцииmalloc
в реализации, и добавьте аварийное завершение работы программы (assert
), если память выделить не удалось (+2 балла); - mergesort.c - реализуйте
mergesort
, используя единственный цикл (сейчас их три) (+2 балла).
Таким образом, если не исправлять недочеты, описанные выше, максимальный балл будет 10 - 2*3 = 4, при условии, что исправленная программа пройдет все тесты.
При посылке новой версии, напишите, пожалуйста, какие из замечаний выше были исправлены.
--
Итог: 2/10, доделывайте.
comment:4 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
1) Исправила компаратор для строк, теперь для них сортировка работает.
2) Сделала в main.c хранение данных в динамической памяти, а не массиве
3) В mergesort.c после выделения динамической памяти добавила аварийное завершение работы программы, если память не выделилась.
comment:5 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Все еще есть ошибки при работе с памятью:
{lab_04}[2050]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04 Updating '.': At revision 1712. M Makefile {lab_04}[2051]$ svn diff Makefile Index: Makefile =================================================================== --- Makefile (revision 1712) +++ Makefile (working copy) @@ -1,11 +1,11 @@ CC = gcc -CFLAGS=-c -Wall -Wextra -Werror -Iinclude -fsanitize=address +CFLAGS=-c -Wall -Wextra -Werror -Iinclude all: lab_04 lab_04: obj/mergesort.o obj/main.o - $(CC) obj/mergesort.o obj/main.o -o lab_04 -fsanitize=address + $(CC) obj/mergesort.o obj/main.o -o lab_04 obj: mkdir obj {lab_04}[2052]$ make mkdir obj gcc -c -Wall -Wextra -Werror -Iinclude src/mergesort.c -o obj/mergesort.o gcc -c -Wall -Wextra -Werror -Iinclude src/main.c -o obj/main.o gcc obj/mergesort.o obj/main.o -o lab_04 {lab_04}[2053]$ valgrind ./lab_04 char a a ==5072== Memcheck, a memory error detector ==5072== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==5072== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==5072== Command: ./lab_04 char a a ==5072== ==5072== Invalid read of size 1 ==5072== at 0x4C31FB4: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5072== by 0x400FAF: comparator.3108 (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400925: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== Address 0x5204091 is 0 bytes after a block of size 1 alloc'd ==5072== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5072== by 0x4007FF: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== ==5072== Invalid read of size 1 ==5072== at 0x4C31FB7: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5072== by 0x400FAF: comparator.3108 (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400925: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== Address 0x52040e1 is 0 bytes after a block of size 1 alloc'd ==5072== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==5072== by 0x400834: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04) ==5072== a a ==5072== ==5072== HEAP SUMMARY: ==5072== in use at exit: 0 bytes in 0 blocks ==5072== total heap usage: 4 allocs, 4 frees, 1,028 bytes allocated ==5072== ==5072== All heap blocks were freed -- no leaks are possible ==5072== ==5072== For counts of detected and suppressed errors, rerun with: -v ==5072== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
main.c - храните данные для сортировки в динамической памяти, а не в массиве переменной длины (array) (+2 балла);
Сделала в main.c хранение данных в динамической памяти, а не массиве
Ok, +2
mergesort.c - реализуйте mergesort, используя один вызов функции malloc в реализации, и добавьте аварийное завершение работы программы (assert), если память выделить не удалось (+2 балла);
В mergesort.c после выделения динамической памяти добавила аварийное завершение работы программы, если память не выделилась.
+0.5
mergesort.c - реализуйте mergesort, используя единственный цикл (сейчас их три) (+2 балла).
Не сделано.
Кроме того, удалите лишние пустые строки из исходников (e.g. main.c:73)
Итог: 4.5, доделывайте.
comment:6 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 1.0 |
1) Исправила ту ошибку при работе с памятью.
2) в mergesort сделала 1 цикл вместо 3.
3) убрала лишние строки.
comment:7 Changed 4 years ago by
Version: | 1.0 → 2.0 |
---|
comment:8 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Не собирается решение -> -1:
{lab_04}[2135]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04 Updating '.': At revision 1802. {lab_04}[2136]$ make mkdir obj gcc -c -Wall -Wextra -Werror -Iinclude -fsanitaze=address src/mergesort.c -o obj/mergesort.o gcc: error: unrecognized command line option ‘-fsanitaze=address’; did you mean ‘-fsanitize=address’? Makefile:14: recipe for target 'obj/mergesort.o' failed make: *** [obj/mergesort.o] Error 1
1) Исправила ту ошибку при работе с памятью.
Ok, +2 за корректность.
2) в mergesort сделала 1 цикл вместо 3.
+2
3) убрала лишние строки.
Не совсем: main.c:72.
Замечания:
- в
mergesort.h
заголовочные файлы подключаются до include guard, а должны внутри него; - в функции mergesort все переменные объявляются в начале функции (а-ля Pascal). В C/C++ зачастую переменные объявляются в месте первого использования.
--
Итог: 7.5
Решение не собирается: