Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

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

WW #3

Reported by: antonenko.mixail Owned by: Святослав Власов
Component: WW_mergesort Version: 2.0
Keywords: Cc:

Description


Change History (11)

comment:1 Changed 3 years ago by antonenko.mixail

Я не очень понял, зачем вручную освобождать память, когда умираешь. Система же обычно делает это.

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

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

Корректность -- 0/7. Не реализовано консольное приложение.
Дочитай и сделай задание до конца.

Стиль -- 0/3

  1. Инклюд гарды?
  2. Пробелы вокруг арифметических операций? Прочитай внимательно абзац "Про стиль" на https://emkn.ru/courses/2020-autumn/2.20-lang_c_low_level_programming/
  3. free(NULL) -- бессмысленная операция.
  4. l <<= 1, круто что ты знаешь семантику побитового сдвига, но лучше писать l *= 2
  5. Длинные строки (>80 символов) лучше разбивать на несколько.
  6. Давай для переменных вроде l, u1, u2, v1, v2, p1, p2 придумаем более говорящие имена. Если l у тебя обозначает длину промежутка, то лучше назвать её length или chunk_size, вместо u и v лучше использовать up/bottom или left/right. Для остальных переменных тоже стоит придумать более говорящие имена.
Last edited 3 years ago by Святослав Власов (previous) (diff)

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

Я не очень понял, зачем вручную освобождать память, когда умираешь. Система же обычно делает это.

Потому что код, который вызывает функцию mergesort, может решить не падать при нехватке памяти, а сделать что-то другое. Поэтому mergesort должна гарантировать, что вся выделенная ей память будет освобождена вне зависимости от результата её работы.

comment:4 Changed 3 years ago by antonenko.mixail

Удивила часть про консольное приложение. Почему-то svn проигнорировала main.c.

  1. Инклюд гарды.
  2. Теперь.
  3. Да, есть такое.
  4. Хорошо.
  5. Хорошо.
  6. Пока что не делал.

Да, вопрос в такой постановке действительно тупой. Видимо, я думал про free в main'е, когда это писал.

comment:5 Changed 3 years ago by antonenko.mixail

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

comment:6 Changed 3 years ago by antonenko.mixail

  1. А не вариант просто рядом с объявлениями пояснять, за что отвечает та или иная переменная? Мне казалось логичным делать длины имён пропорциональными времени жизни; ну да и плотный код с переменными, каждая из которых занимает половину строки, тоже тяжело читать.

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

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

Корректность 0/7

  1. Валгринд рассказывает про definitely lost bytes -- формально это сразу 0/7.
  2. Вызов программы с пустым списком приводит к крашу

Стиль -- 0/3

  1. По прежнему не вижу пробелов вокруг арифметических операторов.
  1. По прежнему вижу строки по >100 символов
  2. Верно, что чем короче время жизни переменной, тем меньше можно заморачиваться по поводу её имени, но когда на небольшом участке кода у тебя скапливается куча переменных с именами вроде u1, v1, p2, l, m, a и т.д., это сильно понижает читабельность кода. Такого нужно избегать. От того, что ты u1 и v1 заменишь на left_1 и right_1, твой код сильно не разрастется, но читаемость повысится в разы. Сделай имена переменных более осмысленными.
  3. Твой вариант создания массива строк с поиском максимальной длины и копирования строк в один большой массив избыточен. Это оверхед по памяти (представь тест где одна строка длиной в тысячу символов и тысяча строк длиной в 1 символ) и бессмысленное лишнее копирование самих строк. Вместо этого сделай так, чтобы в в массиве хранились не сами строки, а указатели на них, и чтобы сортировались тоже указатели, а сами строки в памяти лишний раз не перемещались.
  4. Функция должна называться mergesort, а не my_mergesort.

comment:8 Changed 3 years ago by antonenko.mixail

  1. Не получилось воспроизвести.
  2. Исправлено.

2, 5. Может быть, теперь.

  1. Готово.
  2. Готово.
  3. Я бы и рад, но компилятор жалуется на клэш со стандартной библиотекой.

comment:9 Changed 3 years ago by antonenko.mixail

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

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

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

Всё ок, с бонусом 11/11

Единственное замечание -- копировать строки в отдельный массив избыточно. Можно было просто передать argv в mergesort.

На будущее -- не добавляй ключ -fsanitize=address в дефолтную сборку, он сводит с ума валгринд, а это ломает тесты, и когда засылаешь исправления на проверку меняй пожалуйста версию тикета самостоятельно.

comment:11 Changed 3 years ago by antonenko.mixail

Да, шизофренично вышло.

Last edited 3 years ago by antonenko.mixail (previous) (diff)
Note: See TracTickets for help on using tickets.