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
Owner: | changed from Egor Suvorov to nenashev.aleksey |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 5 years ago by
Owner: | changed from nenashev.aleksey to Egor Suvorov |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:4 Changed 5 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Проверялась ревизия 830 или более ранняя.
Корректность:
- Не хватает
const
и/илиrestrict
в некоторых местах. - Сигнатуры не в точности соответствуют стандарту:
strcmp
должен возвращатьsize_t
. test_str.o
зачем-то зависит отstr.c
вMakefile
.make clean
ничего не очищает. Вообще.- Ваши тесты падают:
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)
my_strcmp
всегда возвращает0
.test_cpy
пытается писать в константную память (" "
лежит в памяти для констант и пытаться менять символы оттуда — undefined behavior) и падает.- Аналогично падает
test_cat
.
Баллы за корректность:
- Корректный strlen и тест +1
Стиль всё ещё 0/3:
- Очень, очень не хватает отступов и пробелов вокруг бинарных операций.
- В тестах лучше проверять больше одного случая. Как раз оказалось, что
test_cmp
у вас идеально попало на тот единственный раз, когда ваша функция работает. - Вместо
if (foo) {} else { assert(1 == 0); } лучше
assert(foo);`. Будет то же самое. - Вместо сложного кода, скопированного из
my_strcmp
, в тестах лучше честно посмотреть в каждый байт массива.
Итого 1 балл. Что меньше, чем было, так что в вашу пользу ничего не меняется.
Note: See
TracTickets for help on using
tickets.
Корректность:
(void)
, иначе в языке Си это означает "любые параметры" (в C++ не так).test.c
включаетstr.h
.Makefile
не соответствует реально включаемым заголовкам.const
и/илиrestrict
в некоторых местах.my_strcmp
делает совсем не то.Стиль (пока 0/3):
my_*
, порядок объявленийmy_*
, порядок описания этих функций в стандарте, порядок этих функций в задании, порядок объявлений тестовых функций, порядок определений тестовых функций, порядок вызовов тестов.my_strlen
.x[a + b] = y[c];
test_str.c
, а вот вwhile (*s != 0)
лучшеwhile (*s)
(и в Си, и в C++, и во всех лабах).'\0'
лучше использовать просто0
.assert(k != 0)
или дажеassert(my_strcmp(/* ... */));
my_strcmp
/my_strlen
/strcmp
/strlen
для проверки. Проверяйте прямо содержимое массивов напрямую.malloc
/free
для выделения локального для функции массива. Просто объявите локальный массив.Баллы за корректность: