Opened 3 years ago

Closed 3 years ago

#210 closed ожидаются исправления (задача сдана)

WW_intrusive_list Klimovich lab_04

Reported by: klimovich.anna Owned by: Антон Филатов
Component: WW_intrusive_list Version: 1.0
Keywords: Cc:

Description


Change History (2)

comment:1 Changed 3 years ago by Антон Филатов

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

Анна, Залейте и более старые лабы тоже. это принципиально, чтобы все лабы были выполнены

Все тесты падают с сегфолтом.
Сегфолт вылезает во время вызова команды rma и при простом вызове exit после добавления одного элемента в список:

add 1 2
print
len
exit

кажется, что дело в этом:

remove_node(list, head);
head = head->next;
free(container_of(head, struct point, node));

зачем же вы делаете и remove_node, и head->next

По формальным требованиям это 0 за корректность
Но остальные функции, кажется, работают правильно

Кажется, что free(list) делает не то, что вам надо. По-хорошему надо пройти по каждой ноде списка и для каждой выполнить free. Не забывайте, что после удаления ноды у неё уже next и prev показывают абы куда

/*Насколько я понимаю, команды нужно было считывать иначе, 
но более простого способа я не придумала */
 fgets(s2, 239, stdin);
 sscanf(s2, "%239s %d %d\n", s, &x, &y);

Здесь подойдёт обычный scanf

Стиль:

  • действительно ли в clist нужны все эти хедеры? может, кому-то из них место в main?
  • кое-где отступы на табах, а кое-где на пробелах
  • вот тут
    //Ниже что-то странное, но только так Werror не ругается
    	add_node(list, this_point->node);
    
    вот так правильно. И никто не ругается

За стиль 1/1,5
В целом код у вас написан правильно. Почините освобождение памяти, и, кажется, всё будет пучком. Давайте я дам вам время до вечера субботы.

comment:2 Changed 3 years ago by Антон Филатов

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

Вывод списка у вас происходит "не в ту стороку" посмотрите повнимательнее, как отрабатывает пример на гите.
При удалении по rm также иногда ругается валгринд

==3723== error calling PR_SET_PTRACER, vgdb might block
==3723== Invalid read of size 8
==3723==    at 0x108A39: remove_point (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==    by 0x108BE4: main (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==  Address 0x522d388 is 8 bytes inside a block of size 24 free'd
==3723==    at 0x4C30D3B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3723==    by 0x1089D9: delete_point (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==    by 0x108A34: remove_point (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==    by 0x108BE4: main (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==  Block was alloc'd at
==3723==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3723==    by 0x108975: add_point (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)
==3723==    by 0x108BA8: main (in /home/wwu/cpp20/cpp20/klimovich.anna/lab_04/lab_04)

Так что 1,5/3,5 за корректность

1,5/1,5 за стиль.
Итого 3/5

Note: See TracTickets for help on using tickets.