#172 closed ожидаются исправления (задача НЕ сдана)
WW #2
Reported by: | vorobeva.polina | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_strings | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (9)
comment:1 Changed 5 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 5 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Всё ещё падают, но уже в другом месте:
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. Assertion failed! File: src/test_str.c, Line 43 Expression: s1_cat_s2[i] == result_s[i]
comment:4 Changed 5 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:5 Changed 5 years ago by
Owner: | changed from Egor Suvorov to vorobeva.polina |
---|
Увы, всё ещё не успех совсем =(
Сейчас у меня под виндой падает ваш тест на strcat
(вам повезло, что под линуксом он падает хотя бы под sanitizer и/или valgind).
Ещё падают наши тесты у strcpy
(возвращаемое значение), strcat
(просто падают примерно всегда), strcmp
(просто падают, у вас не все случаи аккуратно разбираются).
comment:6 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:7 Changed 5 years ago by
Owner: | changed from vorobeva.polina to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Извините, что посылаю решение после дэдлайна:(
Мне кажется, что в моей лабе есть хоть какие-то улучшения, по сравнению с прошлой версией:
Наконец-то strcat не падает и не переполняет bufer. Еще немного изменила strcmp, добавила еще один тест (сравнение пустой и непустой строки).
comment:8 Changed 5 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Проверил обе версии: до дедлайна (которая уже проверялась, но бегло) и после дедлайна. Сейчас выставлена будет та, что до дедлайна.
До дедлайна
Ревизия 754.
Корректность:
- Лишний файл
src/test_src.c
. my_strcpy
возвращает указатель на конец строки, а не на начало.my_strcat
падает на вашем тесте.my_strcmp
неверно работает, когда одна строчка — префикс другой. Например, одна из строк пустая.
Баллы за корректность:
- Корректные заголовки +1
- Корректный strlen и тест +1
Стиль 0.5/3:
- Ставьте закрывающую скобку на отдельной строке.
- Ставьте отступы во всех блоках и внутри фигурных скобок.
- Не оставляйте пустые строки в функциях, если только они не разделяют логические части функции.
- Используйте одинаковые отступы во всех местах программы. В
test_str.c
у вас отступ в один символ — это и мало, и не соответствуетtest.c
. - Объявляйте переменные только когда они реально нужны, а не в начале: смотрю на
s2_
иs2_copy
вtest_strcpy
. - Используйте одинаковый стиль названий переменных: из
s2
иs_2
должен остаться только один (скорееs2
). - Если можете, используйте
for
вместоwhile
(например, вtest_strcat
). - Вместо копирования кода из
my_strcmp
в тесты, напишите руками честноassert
на каждый элемент массива.
А вот test_strcmp
и test_strlen
хороши.
Итого 2.5.
После дедлайна
Ревизия 875.
Корректность:
- Если скомпилировать без address sanitizer, то падают ваши тесты:
osboxes@osboxes:~/cpp2019/cpp19/vorobeva.polina/lab_02$ make clean rm -rf obj lab_02 osboxes@osboxes:~/cpp2019/cpp19/vorobeva.polina/lab_02$ make mkdir obj gcc -std=c99 -c src/str.c -o obj/str.o -Iinclude -Wall -Wextra -Werror gcc -std=c99 -c src/test_str.c -o obj/test_str.o -Iinclude -Wall -Wextra -Werror gcc -std=c99 -c src/test.c -o obj/test.o -Iinclude -Wall -Wextra -Werror gcc -std=c99 obj/str.o obj/test_str.o obj/test.o -o lab_02 osboxes@osboxes:~/cpp2019/cpp19/vorobeva.polina/lab_02$ ./lab_02 lab_02: src/test_str.c:44: test_strcat: Assertion `s1_cat_s2[j] == result_s[j]' failed. Aborted (core dumped) osboxes@osboxes:~/cpp2019/cpp19/vorobeva.polina/lab_02$ valgrind ./lab_02 ==6406== Memcheck, a memory error detector ==6406== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==6406== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==6406== Command: ./lab_02 ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x4005DC: my_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400717: test_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A78: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x4005DC: my_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x40072A: test_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A78: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x400607: my_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x4008A3: test_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A7D: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x400607: my_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x4008B6: test_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A7D: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x400907: test_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A7D: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== Conditional jump or move depends on uninitialised value(s) ==6406== at 0x4008DC: test_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A7D: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== lab_02: src/test_str.c:44: test_strcat: Assertion `s1_cat_s2[j] == result_s[j]' failed. ==6406== ==6406== Process terminating with default action of signal 6 (SIGABRT) ==6406== at 0x4E6F428: raise (raise.c:54) ==6406== by 0x4E71029: abort (abort.c:89) ==6406== by 0x4E67BD6: __assert_fail_base (assert.c:92) ==6406== by 0x4E67C81: __assert_fail (assert.c:101) ==6406== by 0x4008F6: test_strcat (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== by 0x400A7D: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==6406== ==6406== HEAP SUMMARY: ==6406== in use at exit: 0 bytes in 0 blocks ==6406== total heap usage: 2 allocs, 2 frees, 189 bytes allocated ==6406== ==6406== All heap blocks were freed -- no leaks are possible ==6406== ==6406== For counts of detected and suppressed errors, rerun with: -v ==6406== Use --track-origins=yes to see where uninitialised values come from ==6406== ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0) Aborted (core dumped)
- Лишний файл
src/test_src.c
. my_strcpy
возвращает указатель на конец строки, а не на начало.my_strcat
возвращает указатель на конец строки, а не на начало.
Были бы баллы за корректность:
- Корректные заголовки +1
- Корректный strcmp и тест +1
- Корректный strlen и тест +1
По стилю претензии аналогичные, 0.5/3.
Итого было бы 3.5.
comment:9 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Корректность:
- Всё ещё падают ваши тесты:
osboxes@osboxes:~/cpp2019/cpp19/vorobeva.polina/lab_02$ valgrind ./lab_02 ==26801== Memcheck, a memory error detector ==26801== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==26801== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==26801== Command: ./lab_02 ==26801== ==26801== Conditional jump or move depends on uninitialised value(s) ==26801== at 0x4005E4: my_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== by 0x400727: test_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== by 0x400B37: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== ==26801== Conditional jump or move depends on uninitialised value(s) ==26801== at 0x4005E4: my_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== by 0x40073A: test_strcpy (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== by 0x400B37: main (in /home/osboxes/cpp2019/cpp19/vorobeva.polina/lab_02/lab_02) ==26801== ==26801== ==26801== HEAP SUMMARY: ==26801== in use at exit: 0 bytes in 0 blocks ==26801== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==26801== ==26801== All heap blocks were freed -- no leaks are possible ==26801== ==26801== For counts of detected and suppressed errors, rerun with: -v ==26801== Use --track-origins=yes to see where uninitialised values come from ==26801== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
- Лежит лишний файл
test_src.c
. my_strcpy
иногда не работает.
Баллы за корректность 4/7:
- Корректные заголовки +1
- Корректный strcat и тест +1
- Корректный strcmp и тест +1
- Корректный strlen и тест +1
Стиль 2/3:
- В функциях
my_*
лучше неs
(как противопоставлениеs1
), аs1_initial
илиreturn_value
. Чтобы нельзя было случайно перепутатьs1
иs
. - Если можете, используйте
for
вместоwhile
(например, вtest_strcat
). - Вместо копирования кода из
my_strcmp
в тесты, напишите руками честноassert
на каждый элемент массива. После этого заодно исчезнет необходимость записывать строковые литералы в массивы, можно будет делать, как вtest_strcmp
. - Вместо
*s2 && *s1
лучше*s1 && *s2
. В симметричных местах лучше писать по алфавиту.
Итого пока доделано на 6/10.
У меня стабильно падают ваши тесты: