Opened 5 years ago
Closed 5 years ago
#311 closed ожидаются исправления (задача НЕ сдана)
WW #3
Reported by: | Шиповалов Артем | Owned by: | Шиповалов Артем |
---|---|---|---|
Component: | WW_intrusive_list | Version: | 3.0 |
Keywords: | Cc: |
Description
Дело в том, что я сейчас хотел загрузить lab_03, но случайно загрузил вместе с obj и файлом lab_03. Я зашел проверить и увидел это, когда я решил удалить с свн лишние факты, я понял, что удалил все и в основном репозитории тоже не осталась папка lab_03. Я понимаю, что это моя глупость, но я сегодня целый день потратил на доделывание этой работы, сидел с 3 до 8 часов в вышке, и произошла вот такая вот фигня в то время, когда надо было отправлять. Если можно, я готов отправить завтра, потому как мне очень подробно объяснили как это делать, и я могу успеть, если нет то нет, опять же понимаю что мои кривые руки и сонная голова дали о себе знать
Change History (7)
comment:1 Changed 5 years ago by
Owner: | changed from Egor Suvorov to Шиповалов Артем |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 5 years ago by
Owner: | changed from Шиповалов Артем to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Version: | 2.0 → 3.0 |
---|
comment:4 Changed 5 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Type: | ожидается проверка → ожидаются исправления |
- До дедлайна была отправлена только версия 1248. Она, к сожалению, не компилируется. Зато Makefile корректен и структура окей, это +1. По стилю, впрочем, тоже +1, потому что код в целом похож на корректный. Итого 2/10.
Ближайшая более корректная посылка — уже через час после дедлайна (1258) =(
А у неё баллы были бы следующие:
Корректность:
print
не выводит пробелы между точками и не выводит перевод строки в конце.- Если скормить на вход очень длинную команду, то
Unknown command
выведется несколько раз. len
выводит 1 для пустого списка.rma
на непустом списке рушит программу.- Если просто добавить точку и выйти, случается утечка памяти.
Баллы за корректность 4.5/8:
- Корректный Makefile и структура папок +1
- Работают print, add, exit (возможно, с утечками или нарушениями формата) +2
- Корректно обозначен размер буфера при считывании команды +0.5
- Работает ещё и rm +1
Стиль 1.5/4:
- Незачем выделять фиктивный элемент при помощи
malloc
: просто встройтеintrusive_node
как поле вintrusive_list
. - Объявляйте переменные в самом вложенном месте, где они в первый раз нужны.
Например,
a
иb
(а ещё их лучше назватьx
иy
). s
-->command
.printf("%s", "foo");
лучше заменить наprintf("foo");
- Лучше не
if (x != NULL)
, а простоif (x)
. container_of
нужен только вmain
- Ставьте пробелы вокруг бинарных операторов:
x[a + b] = y[c];
- Ставьте пробелы между
for
/while
/if
и следующей скобочкой:while (1)
, неwhile(1)
. Аналогично сelse
. - Ставьте пробелы перед открывающей фигурной скобкой:
while (1) {
, а неwhile (1)
.
Итого было бы 6/12. Пока записал в табличку в примечание.
Если хотите ещё досдать — смело переоткрывайте тикет в любой момент.
comment:5 Changed 5 years ago by
Resolution: | задача НЕ сдана |
---|---|
Status: | closed → reopened |
Type: | ожидаются исправления → ожидается проверка |
comment:6 Changed 5 years ago by
Owner: | changed from Egor Suvorov to Шиповалов Артем |
---|---|
Status: | reopened → assigned |
Type: | ожидается проверка → ожидаются исправления |
Корректность:
- Не выводятся пробелы между точками.
- Не всегда выводится перевод в конце строки.
- Есть UB и утечки на тесте из примера:
==30721== Memcheck, a memory error detector ==30721== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==30721== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==30721== Command: ../../../cpp19/shipovalov.artem/lab_03/lab_03 ==30721== Parent PID: 30709 ==30721== ==30721== Invalid read of size 8 ==30721== at 0x4008DA: remove_all (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== by 0x400AD4: main (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== Address 0x5205198 is 8 bytes inside a block of size 24 free'd ==30721== at 0x4C2EDEB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==30721== by 0x400822: remove_point (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== by 0x4008D5: remove_all (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== by 0x400AD4: main (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== Block was alloc'd at ==30721== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==30721== by 0x400781: add_point (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== by 0x4009C9: main (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== ==30721== ==30721== HEAP SUMMARY: ==30721== in use at exit: 40 bytes in 2 blocks ==30721== total heap usage: 8 allocs, 6 frees, 8,328 bytes allocated ==30721== ==30721== 40 (16 direct, 24 indirect) bytes in 1 blocks are definitely lost in loss record 2 of 2 ==30721== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==30721== by 0x400B32: init_list (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== by 0x400913: main (in /home/osboxes/cpp2019/cpp19/shipovalov.artem/lab_03/lab_03) ==30721== ==30721== LEAK SUMMARY: ==30721== definitely lost: 16 bytes in 1 blocks ==30721== indirectly lost: 24 bytes in 1 blocks ==30721== possibly lost: 0 bytes in 0 blocks ==30721== still reachable: 0 bytes in 0 blocks ==30721== suppressed: 0 bytes in 0 blocks ==30721== ==30721== For counts of detected and suppressed errors, rerun with: -v ==30721== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 0 from 0)
По стилю: скормите, пожалуйста, свой код автоформаттеру.
comment:7 Changed 5 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Дорешивание.
Корректность:
- Не работает
add 1 2
+rma
: UB. - Всегда утекает память (см. вывод Valgrind выше).
- Не выводятся пробелы между точками.
- Не всегда выводится перевод в конце строки.
- Если скормить на вход очень длинную команду, то
Unknown command
выведется несколько раз.
Баллы за корректность 5.5/8:
- Корректный Makefile и структура папок +1
- Работают print, add, exit (возможно, с утечками или нарушениями формата) +2
- Корректно обозначен размер буфера при считывании команды +0.5
- Работает ещё и len +1
- Работает ещё и rm +1
По стилю 2/4:
- Нужен автоформаттер.
- В
add_node
лучше было бы неhead->next = node
, аnode->prev->next = node
для симметрии со следующими строчками. point1
-->point
илиpt
.point *point1; point1 = ...
-->point *point1 = ...
;- Скобочки в выражении
&(a->b)
не нужны. c != NULL
-->c
- Скобочки в
(p->x = x) && (p->y == y))
не нужны. c
/p
— не очень понятные названия.- Объявляйте переменные в самом вложенном месте, где они в первый раз нужны. Смотрю на
x
/y
. - От одной из утечек можно очень просто избавиться, если
head
хранить прямо вintrusive_list
, а не выделять черезmalloc
.
Если захотите ещё дорешать (а корректность у вас чинится добавлением чуть меньше десяти строчек) — смело переоткрывайте тикет.
Дедлайн продлён на сутки, до 22:59 11.10.2019.