Opened 3 years ago

Closed 3 years ago

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

WW #4

Reported by: Tatiana Pridonyants Owned by: Святослав Власов
Component: WW_intrusive_list Version: 3.0
Keywords: Cc:

Description

Не успела сделать все функции, до субботы доделаю

Change History (5)

comment:1 Changed 3 years ago by Святослав Власов

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

Окей.

На данный момент замечания:

  1. Создавать отдельные переменные для каждой команды не имеет смысла, можно сравнивать напрямую со строковыми литералами.
  2. Отступы скачут.

comment:2 Changed 3 years ago by Tatiana Pridonyants

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

comment:3 Changed 3 years ago by Святослав Власов

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

Нет мейкфайла, не могу проверить корректность.
Ради исключения собрал руками, но в следующий раз так делать не буду.

  1. Валгринд детектит утечки
  2. Вывод программы не соответствует заданному в задании (где переводы строк?)

Стиль -- 2/4

  1. Инклюды не должны стоять до гардов. До гардов вообще ничего не должно быть.
  2. Макрос container_of лучше поместить в clist.h
  3. Не нужно выделять память под пустую бесполезную ноду на куче в init_list. Ты можешь либо инициализировать список через list->head = NULL и потом корректно обрабатывать этот случай в функциях добавления/удаления нодов, либо в intrusive_list хранить не указатель на ноду, а саму ноду, тогда её не придется руками удалять.
  4. (void)list в remove_node -- вероятно причина твоих утечек. Сам список тебе не зря передается в функцию. Представь что ты удаляешь первую ноду из списка -- что в таком случае произойдет в твоем алгоритме?
  5. Сам список можно держать на стеке, не нужно его выделять на куче. Это еще одна причина утечек -- ты освобождаешь память под бесполезную головную ноду, но не освобождаешь память под сам список.

comment:4 Changed 3 years ago by Tatiana Pridonyants

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

Что успела исправила, про пункт 3 и 5 не успеваю нормально подумать((

comment:5 Changed 3 years ago by Святослав Власов

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

6/12

Валгринд детектит утечки.
Проверяй программу валгриндом перед отправкой!

Смотри, если бы ты собрала программу с ключиком -g и запустила с валгриндом, после чего прогнала хотя бы тест из самого задания, ты бы увидела среди прочего вывода валгринда такие строчки:

==3318708== 16 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3318708==    at 0x483A77F: malloc (vg_replace_malloc.c:307)
==3318708==    by 0x1095D5: init_list (clist.c:6)
==3318708==    by 0x1093DE: main (main.c:53)
==3318708==

Валгринд тебе говорит, что есть утечки и даже показывает то место, где ты выделила память, которая не освобождается: clist.c:6, функция init_list.
Ты выделяешь память под бесполезную пустую ноду и не освобождаешь её.

Достаточно было написать free(list->head) перед выходом программы, чтобы утечка исчезла.

Note: See TracTickets for help on using tickets.