Opened 5 years ago

Closed 5 years ago

#159 closed ожидается проверка (задача сдана)

WW #3

Reported by: Brilliantov Kirill Owned by: Sokolov Viacheslav
Component: WW_intrusive_list Version: 3.0
Keywords: Cc:

Description


Change History (8)

comment:1 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления
  1. Здесь ошибка.
          free(l.head);
          free(l.tail);
    
  2. &(*x) это x. Лишний код стоит удалить.
  3. Проверка контрактов функции: не хватает assert-ов. Контракты: указатели ненулевые, вершина лежит (или не лежит) в списке и тд
  4. Может быть удобно: https://en.cppreference.com/w/c/string/byte/isdigit
  5. Вместо 1,...6, лучше использовать enum.

comment:2 Changed 5 years ago by Brilliantov Kirill

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

Сейчас программа не работает на примере из условия.
Предлагаю использовать sscanf, чтобы поправить эту проблему.

Именование: nod и node рядом сводят с ума

Еще контракт: при добавлении точки ее нет в списке, а при удалении - есть. Удобно завести отдельную функцию для проверки, есть ли точка в списке. Тогда, в частности, в release сборке от проверки контракта не будет никакого оверхэда.

commands можно сразу инициализировать:
char* commands[6] = {"add", "rm", "len", "rma", "print", "exit"};

Хотелось бы изолировать все детали реализации списка в clist.c, в частности, знание о фиктивной вершине. Для этого стоит сделать функцию, которая возвращает "настоящую" голову.

comment:4 Changed 5 years ago by Brilliantov Kirill

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:5 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

Имелось в виду

intrusive_node *get_head(intrusive_list *list) { return list->head->next; }

чтобы в main.c фигурировали только такие указатели, что от них безопасно звать container_of.

В частности, желательно, чтобы free(l->head) располагался в clist.c

Желательны пустые строки между функциями.

comment:6 Changed 5 years ago by Brilliantov Kirill

Type: ожидаются исправленияожидается проверка

Насчет getHead. Я не очень понимаю зачем делать как Вы говорите, если в моей реализации list->head указывает на элемент, который был последним добавленным. А если в списке нет элементов, то has_next(...) вернет -1 и container_of вызыван не будет.

comment:7 Changed 5 years ago by Sokolov Viacheslav

Вроде бы устно обсудили, что имелось ввиду.

comment:8 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.