Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#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 Egor Suvorov

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

У меня стабильно падают ваши тесты:

lab_02: src/test_str.c:12: test_strcpy: Assertion `my_strcpy(s1, s_1)== s_1' failed.
Aborted (core dumped)

comment:2 Changed 5 years ago by vorobeva.polina

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

comment:3 Changed 5 years ago by Egor Suvorov

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 vorobeva.polina

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

comment:5 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to vorobeva.polina

Увы, всё ещё не успех совсем =(

Сейчас у меня под виндой падает ваш тест на strcat (вам повезло, что под линуксом он падает хотя бы под sanitizer и/или valgind).

Ещё падают наши тесты у strcpy (возвращаемое значение), strcat (просто падают примерно всегда), strcmp (просто падают, у вас не все случаи аккуратно разбираются).

comment:6 Changed 5 years ago by Egor Suvorov

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

comment:7 Changed 5 years ago by vorobeva.polina

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

Извините, что посылаю решение после дэдлайна:(

Мне кажется, что в моей лабе есть хоть какие-то улучшения, по сравнению с прошлой версией:
Наконец-то strcat не падает и не переполняет bufer. Еще немного изменила strcmp, добавила еще один тест (сравнение пустой и непустой строки).

comment:8 Changed 5 years ago by Egor Suvorov

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

Проверил обе версии: до дедлайна (которая уже проверялась, но бегло) и после дедлайна. Сейчас выставлена будет та, что до дедлайна.

До дедлайна

Ревизия 754.

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

  1. Лишний файл src/test_src.c.
  2. my_strcpy возвращает указатель на конец строки, а не на начало.
  3. my_strcat падает на вашем тесте.
  4. my_strcmp неверно работает, когда одна строчка — префикс другой. Например, одна из строк пустая.

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

  • Корректные заголовки +1
  • Корректный strlen и тест +1

Стиль 0.5/3:

  1. Ставьте закрывающую скобку на отдельной строке.
  2. Ставьте отступы во всех блоках и внутри фигурных скобок.
  3. Не оставляйте пустые строки в функциях, если только они не разделяют логические части функции.
  4. Используйте одинаковые отступы во всех местах программы. В test_str.c у вас отступ в один символ — это и мало, и не соответствует test.c.
  5. Объявляйте переменные только когда они реально нужны, а не в начале: смотрю на s2_ и s2_copy в test_strcpy.
  6. Используйте одинаковый стиль названий переменных: из s2 и s_2 должен остаться только один (скорее s2).
  7. Если можете, используйте for вместо while (например, в test_strcat).
  8. Вместо копирования кода из my_strcmp в тесты, напишите руками честно assert на каждый элемент массива.

А вот test_strcmp и test_strlen хороши.

Итого 2.5.

После дедлайна

Ревизия 875.

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

  1. Если скомпилировать без 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)
    
  2. Лишний файл src/test_src.c.
  3. my_strcpy возвращает указатель на конец строки, а не на начало.
  4. my_strcat возвращает указатель на конец строки, а не на начало.

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

  • Корректные заголовки +1
  • Корректный strcmp и тест +1
  • Корректный strlen и тест +1

По стилю претензии аналогичные, 0.5/3.

Итого было бы 3.5.

comment:9 Changed 5 years ago by Egor Suvorov

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

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

  1. Всё ещё падают ваши тесты:
    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)
    
  2. Лежит лишний файл test_src.c.
  3. my_strcpy иногда не работает.

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

  • Корректные заголовки +1
  • Корректный strcat и тест +1
  • Корректный strcmp и тест +1
  • Корректный strlen и тест +1

Стиль 2/3:

  1. В функциях my_* лучше не s (как противопоставление s1), а s1_initial или return_value. Чтобы нельзя было случайно перепутать s1 и s.
  2. Если можете, используйте for вместо while (например, в test_strcat).
  3. Вместо копирования кода из my_strcmp в тесты, напишите руками честно assert на каждый элемент массива. После этого заодно исчезнет необходимость записывать строковые литералы в массивы, можно будет делать, как в test_strcmp.
  4. Вместо *s2 && *s1 лучше *s1 && *s2. В симметричных местах лучше писать по алфавиту.

Итого пока доделано на 6/10.

Note: See TracTickets for help on using tickets.