Opened 3 years ago

Closed 3 years ago

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

intrusive_list (lab_04) Korkin

Reported by: korkin.igor Owned by: Антон Филатов
Component: WW_intrusive_list Version: 2.0
Keywords: Cc:

Description


Change History (9)

comment:1 Changed 3 years ago by korkin.igor

Сейчас немного исправил программу, сделав её до конца рабочей. Надеюсь, это не слишком критично, что после дедлайна.
Правда, память сейчас течет, как крыша Запарожца во время ливня, но я ничего не смог с этим сделать, потому что когда я делаю free(...), то мне каждый раз выкидывает Segmentation fault (core dumped), хотя вроде дальше то, что освобождалось, не используется (а иногда segfault вылетал прям во время free(...) ненулевого указателя, и тут я уже вообще не знаю, что делать). Есть какие-то подсказки, как такое вообще можно дебажить? А то что-то совсем прям грустно.

comment:2 Changed 3 years ago by korkin.igor

Так, сейчас вроде уже протечек памяти меньше, но они все равно есть, и я до сих пор не знаю, что с ними вообще надо делать.

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

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

слушайте, ну у вас не просто течёт память, а прям сегфолт бывает.
То ли если после rm сделать add, то ли если сделать rma, а потом add

Валгринд вообще очень много на что ругается. я уж не буду сюда полотно из 75 его ошибок копипастить. Но если вам нужно - говорите, я пришлю.
Часть ошибок точно решится, если вы выделите память под command в main, а то вы считываете 239 символов в переменную, под которую память не выделена.
Помимо этого в конце main нету удаления всего выделенного места. А если пользователь не ввёл rma, кто же будет память чистить?

По формальным признакам это 0/8 за корректность
Стиль:

  • make при повторном вызове вместо того, чтобы сказать, что nothing to be done, падает с ошибкой - нехорошо
  • container_of место скорее в main.c, правда? его же только там используют
  • а для чего вы в add_node передаёте intrusive_node* * to_add? вы собираетесь внутри этой функции перенаправлять этот указатель? А почему вы его потом конвертируете к intrusive_node* ? Я чёт не понимаю, почему это должно работать
  • в clist.h нужны все эти инклюды? или кто-то из них нужен только в main?

2/4 за стиль
Итого 2/12

Last edited 3 years ago by Антон Филатов (previous) (diff)

comment:4 Changed 3 years ago by korkin.igor

Так. Окзалалось, что offsetof выдавал какую-то фигню, поэтому я пока написал костыль, но сейчас оно хотя бы работает. Можете пожалуйста проверить на утечки теперышний код?

P.S.: собственно intrusive_node* * пришлось писать из-за offserof'а, который не работал так, как от него требуется. Сейчас я его вроде убрал.

comment:5 Changed 3 years ago by korkin.igor

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

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

Да, сейчас утечек нет тесты проходят верно, но полностью проверку я делать сейчас не буду. Пофиксите все мои замечания к субботе

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

глобальная N = (void*)to_add->node - (void*)to_add; - вот это зло, не надо так. надеюсь, вы его тоже уберёте

comment:8 Changed 3 years ago by korkin.igor

Version: 1.02.0

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

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

Тесты все проходят 8/8
Стиль:

  • теперь make что-то пытается делать при повторном вызове. Да, всего одну строчку, но всё равно, можно сделать так, чтобы этого не было

3,5/4

Итого: 11,5/12

Note: See TracTickets for help on using tickets.