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
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
К сожалению, финальная версия не работает на тестовых данных (из условия; зависает). Проблема в методе contains: должно быть не cur++, а cur = cur->next.
Также не исправлена эта проблема
в create_node, вызываемом в init_list, аллоцируют память, которую никто не освобождает.
Note: See
TracTickets for help on using
tickets.
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) безвозвратно теряется.В части работы с точками все хорошо.