Opened 5 years ago

Closed 5 years ago

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

WW_mergesort

Reported by: Roman Venediktov Owned by: Sokolov Viacheslav
Component: WW_mergesort Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 5 years ago by Sokolov Viacheslav

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

Отличная работа!

Несколько незначительных комментариев:

  • можно было бы проверить, что elements * element_size не переполняется, а element_size не 0
  • если elements == 0, то malloc(elements * element_size) может вернуть NULL по стандарту: https://en.cppreference.com/w/c/memory/malloc

If size is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage, but has to be passed to free).

  • сейчас реализация делает O(n) аллокаций, а можно было бы обойтись одной (не требуется в этой лабораторной)
  • почти от всех умножений можно избавиться, если поддерживать текущие указатели на позиции элементов (char*).
  • про каст указателя к числу: корректно делать это, используя uintptr_t (специальный тип для этого). Резонный вопрос, в чем же разница (думаю, что на современной архитектуре ее на самом деле нет), конечно же, уже кто-то задавал: https://stackoverflow.com/questions/1464174/size-t-vs-uintptr-t Второй момент состоит в том, что можно написать короче: abs(from - to) >= length (равенство же ничему не противоречит?), но... это не будет работать, если length * 2 переполняется... В общем типичные проблемы корректности при граничных условиях. Так что в текущей реализации стоит поправить > -> >= , size_t -> uintptr_t.

Из всего перечисленного существенным является только случай elements == 0.

comment:2 Changed 5 years ago by Roman Venediktov

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

comment:3 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.