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: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Нет мейкфайла, не могу проверить корректность.
Ради исключения собрал руками, но в следующий раз так делать не буду.
- Валгринд детектит утечки
- Вывод программы не соответствует заданному в задании (где переводы строк?)
Стиль -- 2/4
- Инклюды не должны стоять до гардов. До гардов вообще ничего не должно быть.
- Макрос container_of лучше поместить в clist.h
- Не нужно выделять память под пустую бесполезную ноду на куче в init_list. Ты можешь либо инициализировать список через list->head = NULL и потом корректно обрабатывать этот случай в функциях добавления/удаления нодов, либо в intrusive_list хранить не указатель на ноду, а саму ноду, тогда её не придется руками удалять.
- (void)list в remove_node -- вероятно причина твоих утечек. Сам список тебе не зря передается в функцию. Представь что ты удаляешь первую ноду из списка -- что в таком случае произойдет в твоем алгоритме?
- Сам список можно держать на стеке, не нужно его выделять на куче. Это еще одна причина утечек -- ты освобождаешь память под бесполезную головную ноду, но не освобождаешь память под сам список.
comment:4 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
Что успела исправила, про пункт 3 и 5 не успеваю нормально подумать((
comment:5 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
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) перед выходом программы, чтобы утечка исчезла.
Окей.
На данный момент замечания: