Opened 3 years ago

Closed 3 years ago

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

WW_mergesort

Reported by: em.vladislv Owned by: Святослав Власов
Component: WW_mergesort Version: 3.0
Keywords: Cc:

Description


Change History (5)

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

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

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

  1. Валгринд ругается на lost bytes, потому что ты не освобождаешь за собой память.
  2. Твой mergesort работает только с типами данных, размер которых равен sizeof(int) или sizeof(char). Это не соответствует заданию, mergesort должен быть универсальным и должен уметь работать с типами любых размеров. Для этого тебе нужно реализовать функцию, которая будет побайтово копировать данные любого размера.
  3. char сортируется некорректно, ты там что-то химичешь с числом 14 непонятно зачем, что-то куда-то копируешь непонятно зачем в итоге ничего не работает.
  4. Сортировка строк не реализована.

Стиль -- 0/3:

  1. Длинные строки (>80 символов) нужно разбивать на несколько. Примеры того, как строки должны разбиваться для условий, вызовов функций, объявлений функций и т.д. можешь посмотреть вот тут -- ​https://google.github.io/styleguide/cppguide.html#Formatting
  2. Переборщил с пустыми строками. Не нужно их настолько много, они должны отделять логические блоки друг от друга и быть чем-то вроде логических пауз, а не стоять после каждой строчки-двух. Особенно вот так писать не надо:
}

else {

Так обычно не пишут, обычно else записывается вот так:

} else {
  1. Не проверяешь ассертами выделенную память.
  2. Не хватает перевода строки в конце вывода
  3. Зачем тебе нужна переменная extra_array, куда ты сначала выделяешь память, а потом её не пользуешься? По сути вот эти строчки -- это каноничный memory leak, практически как я демонстрировал на практике:
    char *extra_array = malloc(argc);
    extra_array = *argv; 
    

Ты сначала выделил кусок памяти, записал указатель на этот кусок в extra_args, а потом этот указатель перезатер другим значением, а память осталась выделенной и никто на неё больше не указывает и освободить её нельзя.

  1. Заголовочные файлы не указаны в качестве зависимостей в Makefile

comment:2 Changed 3 years ago by em.vladislv

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

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

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

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

Стиль -- 2.6/3

  1. Длинные строки нужно разбить еще и в заголовочных файлах.
  2. Некрасиво же:
      for (int i = 0; i < numb; i++)
        ((char *)trg)[i] = ((char *)src)[i];
    

Заведи отдельные переменные типа char* и и присвой им аргументы, так не придется городить этих приведений.

  1. Цикл for был специально придуман, чтобы упростить запись таких циклов. Используй его.
        i = 0;
        while (i < argc - 2) {
          printf("%d ", array[i]);
          i++;
        }
    
  2. Когда ты сортируешь строки, не обязательно копировать argv в отдельный массив. Можно сортировать прямо argv.

comment:4 Changed 3 years ago by em.vladislv

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

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

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

10/10

Note: See TracTickets for help on using tickets.