Opened 5 years ago

Closed 5 years ago

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

WW #2

Reported by: nenashev.aleksey Owned by: Egor Suvorov
Component: WW_strings Version: 2.0
Keywords: Cc:

Description


Change History (4)

comment:1 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to nenashev.aleksey
Type: ожидается проверкаожидаются исправления

Корректность:

  1. У тестовых функций нет параметров => в сигнатуре должно быть (void), иначе в языке Си это означает "любые параметры" (в C++ не так).
  2. Непонятно, зачем test.c включает str.h.
  3. Зависимости от заголовков в Makefile не соответствует реально включаемым заголовкам.
  4. Не хватает const и/или restrict в некоторых местах.
  5. Сигнатуры не в точности соответствуют стандарту.
  6. my_strcmp делает совсем не то.

Стиль (пока 0/3):

  1. Следующие порядки должны совпадать: порядок определений my_*, порядок объявлений my_*, порядок описания этих функций в стандарте, порядок этих функций в задании, порядок объявлений тестовых функций, порядок определений тестовых функций, порядок вызовов тестов.
  2. Много переменных с одинаковыми значениями. Например, в my_strlen.
  3. Ставьте пробелы вокруг бинарных операторов: x[a + b] = y[c];
  4. Ставьте отступы во всех блоках и внутри фигурных скобок. Особенно грешит test_str.c, а вот в
  5. Вместо while (*s != 0) лучше while (*s) (и в Си, и в C++, и во всех лабах).
  6. Вместо '\0' лучше использовать просто 0.
  7. Можно писать просто assert(k != 0) или даже assert(my_strcmp(/* ... */));
  8. В тестах можно сравнивать прямо строковые литералы (они уже лежат в константной памяти, на них можно брать указатели), незачем их сначала класть в массив.
  9. В тестах лучше не используйте my_strcmp/my_strlen/strcmp/strlen для проверки. Проверяйте прямо содержимое массивов напрямую.
  10. Не используйте malloc/free для выделения локального для функции массива. Просто объявите локальный массив.

Баллы за корректность:

  • Ваши тесты проходят +1
  • Корректный strcpy и тест +1
  • Корректный strcat и тест +1
  • Корректный strlen и тест +1

comment:2 Changed 5 years ago by nenashev.aleksey

Owner: changed from nenashev.aleksey to Egor Suvorov
Version: 1.02.0

comment:3 Changed 5 years ago by nenashev.aleksey

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

comment:4 Changed 5 years ago by Egor Suvorov

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

Проверялась ревизия 830 или более ранняя.

Корректность:

  1. Не хватает const и/или restrict в некоторых местах.
  2. Сигнатуры не в точности соответствуют стандарту: strcmp должен возвращать size_t.
  3. test_str.o зачем-то зависит от str.c в Makefile.
  4. make clean ничего не очищает. Вообще.
  5. Ваши тесты падают:
    osboxes@osboxes:~/cpp2019/cpp19/nenashev.aleksey/lab_02$ make
    mkdir obj
    gcc -c -o obj/str.o src/str.c -Wall -Wextra -Werror -Iinclude 
    gcc -c -o obj/test.o src/test.c -Wall -Wextra -Werror -Iinclude 
    gcc -c -o obj/test_str.o src/test_str.c -Wall -Wextra -Werror -Iinclude 
    gcc obj/str.o obj/test.o obj/test_str.o -o lab_02  -Wall -Wextra -Werror -Iinclude 
    osboxes@osboxes:~/cpp2019/cpp19/nenashev.aleksey/lab_02$ ./lab_02
    Segmentation fault (core dumped)
    osboxes@osboxes:~/cpp2019/cpp19/nenashev.aleksey/lab_02$ valgrind ./lab_02
    ==6513== Memcheck, a memory error detector
    ==6513== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
    ==6513== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
    ==6513== Command: ./lab_02
    ==6513== 
    ==6513== 
    ==6513== Process terminating with default action of signal 11 (SIGSEGV)
    ==6513==  Bad permissions for mapped region at address 0x4009E0
    ==6513==    at 0x4005BB: my_strcpy (in /home/osboxes/cpp2019/cpp19/nenashev.aleksey/lab_02/lab_02)
    ==6513==    by 0x400778: test_cpy (in /home/osboxes/cpp2019/cpp19/nenashev.aleksey/lab_02/lab_02)
    ==6513==    by 0x40071B: main (in /home/osboxes/cpp2019/cpp19/nenashev.aleksey/lab_02/lab_02)
    ==6513== 
    ==6513== HEAP SUMMARY:
    ==6513==     in use at exit: 0 bytes in 0 blocks
    ==6513==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
    ==6513== 
    ==6513== All heap blocks were freed -- no leaks are possible
    ==6513== 
    ==6513== For counts of detected and suppressed errors, rerun with: -v
    ==6513== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
    Segmentation fault (core dumped)
    
  6. my_strcmp всегда возвращает 0.
  7. test_cpy пытается писать в константную память (" " лежит в памяти для констант и пытаться менять символы оттуда — undefined behavior) и падает.
  8. Аналогично падает test_cat.

Баллы за корректность:

  • Корректный strlen и тест +1

Стиль всё ещё 0/3:

  1. Очень, очень не хватает отступов и пробелов вокруг бинарных операций.
  2. В тестах лучше проверять больше одного случая. Как раз оказалось, что test_cmp у вас идеально попало на тот единственный раз, когда ваша функция работает.
  3. Вместо if (foo) {} else { assert(1 == 0); } лучше assert(foo);`. Будет то же самое.
  4. Вместо сложного кода, скопированного из my_strcmp, в тестах лучше честно посмотреть в каждый байт массива.

Итого 1 балл. Что меньше, чем было, так что в вашу пользу ничего не меняется.

Note: See TracTickets for help on using tickets.