Opened 5 years ago

Closed 5 years ago

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

WW #3

Reported by: Alexander Morozov Owned by: Sokolov Viacheslav
Component: WW_intrusive_list Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 5 years ago by Sokolov Viacheslav

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

obj/main.o: src/main.c еще от include/clist.h есть зависимость. Если поменять заголовочный файл, main не пересоберется, что может быть проблемой.

Насчет gnu extensions написал (косвенно) в правилах https://wiki.compscicenter.ru/index.php/C%2B%2B_1MIT_осень_1_2019 : использовать знание о целевой платформе желательно только в Makefile, а код писать в соответствии со Стандартом.

Не хватает проверки соблюдения контрактов (в обоих .c файлах):

  • указатели ненулевые
  • если вершину просят из списка удалить, стоит поставить assert, что ее там нет изначально
  • malloc может вернуть NULL

Я бы предпочел видеть именование не lst и nd, а list и node. В чем выигрыш от сокращения?

Like за функцию get_cont; но имя я бы поменял: get_cont -> get_corresponding_point, например.

Есть какая-то мотивация в сигнатуре struct intrusive_list *add_point, а не void add_point?

comment:2 Changed 5 years ago by Alexander Morozov

Вроде бы все исправил. Мотивации в такой сигнатуре не было, я почему-то подумал, что в задании хотят, чтобы было так. Возможно, потому что я сначала подумал, что список мы храним по значению, а не по указателю. Не понял, что такое release-конфигурация, поэтому добавил -DDEBUG в параметры командной строки и делаю медленную проверку на то, есть ли в списке удаляемая вершина только под дебагом.

comment:3 Changed 5 years ago by Alexander Morozov

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

comment:4 Changed 5 years ago by Sokolov Viacheslav

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

release режим сборки:
-DNDEBUG (вырезаются все ассерты) -O3 (или его аналог - наиболее агрессивная оптимизация) и, возможно -flto (оптимизация на этапе компоновки).
Ключевое - удаление assert-ов.

init_list: не хватает проверки на not null

Стоит вынести проверку принадлежности точки списку в отдельную функцию contains(list, node), убрать #ifdef DEBUG, оставить assert(contains(list, node)), добавить в add_node assert(not contains(list, node)).

Сейчас программа не работает на тестовом примере (зависает). Стоит тестировать перед отправкой. (Несложно же! ./lab_03 < example.txt Сила привычки!)

comment:5 Changed 5 years ago by Alexander Morozov

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

comment:6 Changed 5 years ago by Sokolov Viacheslav

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

contains: не хватает проверки на not null

в add_node и remove_node можно было бы добавить проверку пост-условия (not contains и contains соответственно)

Note: See TracTickets for help on using tickets.