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 Egor Suvorov

Owner: changed from Egor Suvorov to Шиповалов Артем
Type: ожидается проверкаожидаются исправления

Дедлайн продлён на сутки, до 22:59 11.10.2019.

comment:2 Changed 5 years ago by Шиповалов Артем

Owner: changed from Шиповалов Артем to Egor Suvorov
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 5 years ago by Шиповалов Артем

Version: 2.03.0

comment:4 Changed 5 years ago by Egor Suvorov

Resolution: задача НЕ сдана
Status: assignedclosed
Type: ожидается проверкаожидаются исправления
  • До дедлайна была отправлена только версия 1248. Она, к сожалению, не компилируется. Зато Makefile корректен и структура окей, это +1. По стилю, впрочем, тоже +1, потому что код в целом похож на корректный. Итого 2/10.

Ближайшая более корректная посылка — уже через час после дедлайна (1258) =(

А у неё баллы были бы следующие:

Корректность:

  1. print не выводит пробелы между точками и не выводит перевод строки в конце.
  2. Если скормить на вход очень длинную команду, то Unknown command выведется несколько раз.
  3. len выводит 1 для пустого списка.
  4. rma на непустом списке рушит программу.
  5. Если просто добавить точку и выйти, случается утечка памяти.

Баллы за корректность 4.5/8:

  • Корректный Makefile и структура папок +1
  • Работают print, add, exit (возможно, с утечками или нарушениями формата) +2
  • Корректно обозначен размер буфера при считывании команды +0.5
  • Работает ещё и rm +1

Стиль 1.5/4:

  1. Незачем выделять фиктивный элемент при помощи malloc: просто встройте intrusive_node как поле в intrusive_list.
  2. Объявляйте переменные в самом вложенном месте, где они в первый раз нужны. Например, a и b (а ещё их лучше назвать x и y).
  3. s --> command.
  4. printf("%s", "foo"); лучше заменить на printf("foo");
  5. Лучше не if (x != NULL), а просто if (x).
  6. container_of нужен только в main
  7. Ставьте пробелы вокруг бинарных операторов: x[a + b] = y[c];
  8. Ставьте пробелы между for/while/if и следующей скобочкой: while (1), не while(1). Аналогично с else.
  9. Ставьте пробелы перед открывающей фигурной скобкой: while (1) {, а не while (1).

Итого было бы 6/12. Пока записал в табличку в примечание.

Если хотите ещё досдать — смело переоткрывайте тикет в любой момент.

Last edited 5 years ago by Egor Suvorov (previous) (diff)

comment:5 Changed 5 years ago by Egor Suvorov

Resolution: задача НЕ сдана
Status: closedreopened
Type: ожидаются исправленияожидается проверка

comment:6 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to Шиповалов Артем
Status: reopenedassigned
Type: ожидается проверкаожидаются исправления

Корректность:

  1. Не выводятся пробелы между точками.
  2. Не всегда выводится перевод в конце строки.
  3. Есть 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 Egor Suvorov

Resolution: задача НЕ сдана
Status: assignedclosed

Дорешивание.

Корректность:

  1. Не работает add 1 2 + rma: UB.
  2. Всегда утекает память (см. вывод Valgrind выше).
  3. Не выводятся пробелы между точками.
  4. Не всегда выводится перевод в конце строки.
  5. Если скормить на вход очень длинную команду, то Unknown command выведется несколько раз.

Баллы за корректность 5.5/8:

  • Корректный Makefile и структура папок +1
  • Работают print, add, exit (возможно, с утечками или нарушениями формата) +2
  • Корректно обозначен размер буфера при считывании команды +0.5
  • Работает ещё и len +1
  • Работает ещё и rm +1

По стилю 2/4:

  1. Нужен автоформаттер.
  2. В add_node лучше было бы не head->next = node, а node->prev->next = node для симметрии со следующими строчками.
  3. point1 --> point или pt.
  4. point *point1; point1 = ... --> point *point1 = ...;
  5. Скобочки в выражении &(a->b) не нужны.
  6. c != NULL --> c
  7. Скобочки в (p->x = x) && (p->y == y)) не нужны.
  8. c/p — не очень понятные названия.
  9. Объявляйте переменные в самом вложенном месте, где они в первый раз нужны. Смотрю на x/y.
  10. От одной из утечек можно очень просто избавиться, если head хранить прямо в intrusive_list, а не выделять через malloc.

Если захотите ещё дорешать (а корректность у вас чинится добавлением чуть меньше десяти строчек) — смело переоткрывайте тикет.

Note: See TracTickets for help on using tickets.