Opened 3 years ago

Closed 3 years ago

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

WW4_Kravchenko

Reported by: kravchenko.egor Owned by: Святослав Власов
Component: WW_intrusive_list Version: 3.0
Keywords: Cc:

Description

С прочтением только куска строки только с костылём удалось справиться.
Также удаление работает за квадрат, хотя могло бы за линию, если можно пользоваться тем, что в списке точки лежат (или какая-нибудь известная структура).
Отступы были проверены clang-format. На простых тестах valgrind утечек памяти не нашёл.

Change History (6)

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

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

Корректность -- 0/7. Валгринд детектит лики.

Стиль -- 0/3.

  1. Зачем создавать пустую бесполезную ноду при инициализации списка? Можно обойтись без неё.
  2. Не нужно копировать ноды в функцию для их сравнения или удаления.
  3. Функция remove_node должна работать за константное время, у тебя очевидно этого не происходит.
  4. Зачем это?:
    p->node = *((intrusive_node_t *)malloc(sizeof(intrusive_node_t)));
    

Интрузивная нода потому и называется интрузивной, что она лежит внутри структуры point в качестве поля, под неё не нужно отдельно выделять память.

  1. Зачем нужна переменная с именем node в функции remove_point?
  2. Зачем дважды писать cur = cur->next в цикле remove_point, если можно вынести эту строчку за условие? И вообще цикл for тут смотрится уместнее.
  3. Зачем ты выделяешь память под буфер для команды на куче, если он у тебя константного и заранее известного размера? И зачем ты его перевыделяешь после каждой итерации главного цикла?
  4. Что ты имеешь ввиду?
    //костыль... Как это нормально сделать?
    

comment:2 Changed 3 years ago by kravchenko.egor

Version: 1.02.0

1.Чтобы не писать лишних ифов на то, существует ли вершина слева от удаляемой/добавляемой. Можно ещё вторую пустую добавить с другого конца. Тогда количество ифов ещё уменьшится, но лень код переписывать.

2-7. Исправлено.

  1. Считывать по символу и проверять на то, что он '\n', не очень красиво и работать плохо может. Переводы строки же разные бывают. Моя программа будет работать только если это будет LF('\n'), а вот если CR ('\r') или CR+LF ("\r\n") -- то надо ещё ифов поставить, буфер для последнего символа завести. Может быть можно это как-то просто парой строчек написать?

comment:3 Changed 3 years ago by kravchenko.egor

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

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

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

Корректность 8/8

Стиль -- 2.5/4

  1. Выделение лишней памяти и её освобождение в функции init_list совершенно бессмысленно.
  2. Можно написать парой строчек, например используя fgets. fgets принимает на вход буфер и его размер, читает символы из строки до тех пор, пока не встретит перевод строки, либо пока буфер не закончится. Символ перевода строки также читается в буфер. Найти символ в строке можно с помощью функции strchr.

comment:5 Changed 3 years ago by kravchenko.egor

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

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

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

12/12

Note: See TracTickets for help on using tickets.