Opened 5 years ago

Closed 5 years ago

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

WW #3

Reported by: Bagryanova Ekaterina Owned by: Sokolov Viacheslav
Component: WW_intrusive_list Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 5 years ago by Sokolov Viacheslav

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

malloc может вернуть NULL, нужны assert-ы!

в create_node, вызываемом в init_list, аллоцируют память, которую никто не освобождает.

для remove_node хотелось бы увидеть другой интерфейс: void remove_node(struct intrusive_list *list, struct intrusive_node *node). В таком случае есть возможность проверить (assert), что node вообще содержится в list. Для этого удобно сделать отдельный метод contains(list, node). Также в add_node можно проверить, что новая вершина еще не содержится в списке.

Сигнатура: не create_list(), а create_list(void).

Смысл интрузивности в том, что вершина списка аллоцируется одновременно с point; звать еще один malloc из create_node не нужно. Кроме того, в текущем варианте память, аллоцированная в create_node на самом деле никогда не освобождается. Так происходит, потому что вот в этой cur->node = *create_node(); строке копируется память, а сам указатель (который нужно передать во free) безвозвратно теряется.

В части работы с точками все хорошо.

comment:2 Changed 5 years ago by Bagryanova Ekaterina

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

comment:3 Changed 5 years ago by Sokolov Viacheslav

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

К сожалению, финальная версия не работает на тестовых данных (из условия; зависает). Проблема в методе contains: должно быть не cur++, а cur = cur->next.

Также не исправлена эта проблема

в create_node, вызываемом в init_list, аллоцируют память, которую никто не освобождает.

утечек памяти быть не должно https://wiki.compscicenter.ru/index.php/C%2B%2B_1MIT_осень_1_2019#.D0.A2.D1.80.D0.B5.D0.B1.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BA.D0.BE.D1.80.D1.80.D0.B5.D0.BA.D1.82.D0.BD.D0.BE.D1.81.D1.82.D0.B8.2C_.D0.BF.D1.80.D0.B5.D0.B4.D1.8A.D1.8F.D0.B2.D0.BB.D1.8F.D0.B5.D0.BC.D1.8B.D0.B5_.D0.BA_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.B0.D0.BC

Note: See TracTickets for help on using tickets.