Opened 5 years ago

Closed 5 years ago

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

WW #4

Reported by: Solovyev Gleb 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: ожидается проверкаожидаются исправления

Отличная работа, код легко воспринимается, комментарии по делу.

Есть проблема.
результат вызова malloc(0) не специфирован
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).

В частности, если elements == 0, mergesort может вернуть -1.
Также не разрешены массивы размера 0:
https://en.cppreference.com/w/c/language/array

If expression in an array declarator is an integer constant expression with a value greater than zero and the element type is a type with a known constant size (that is, elements are not VLA) (since C99), then the declarator declares an array of constant known size:

По этим причинам случай 0 элементов не работает.

Что можно сделать лучше:

  • проверить, что не переполняется element_size * elements
  • не терять константность: return strcmp(*((CONST char**) p1), *((CONST char**) p2));
  • можно сделать один while и уменьшить копирование кода, если проверять условие
    while(!(i == right_bound1 && j == right_bound2))
    

comment:2 Changed 5 years ago by Solovyev Gleb

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.