Opened 5 years ago

Closed 5 years ago

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

WW #2

Reported by: kozubaev.nurmukhammad Owned by: Egor Suvorov
Component: WW_strings Version: 1.0
Keywords: Cc:

Description


Change History (1)

comment:1 Changed 5 years ago by Egor Suvorov

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

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

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

  1. size_t надо добывать из <stddef.h>, а не объявлять руками.
  2. У тестовых функций нет параметров => в сигнатуре должно быть (void), иначе в языке Си это означает "любые параметры" (в C++ не так).
  3. my_strcmp делает совсем не то. Строчка ab лексикографически меньше строчки z.
  4. Падают ваши собственные тесты. Кажется, вы посчитали, что assert требует себе ложное условие, иначе роняет программу. Всё наоборот: assert(2 * 2 == 4) не падает, assert — это "убедись, что". Если же тесты закомментировать, то падают следующие тесты, итого упали почти все:
    lab_02: src/test_str.c:9: test_strcpy: Assertion `!(*pp == '\0')' failed.
    lab_02: src/test_str.c:24: test_strlen: Assertion `my_strlen("123") != 3' failed.
    lab_02: src/test_str.c:33: test_strcmp: Assertion `my_strcmp(a,b) <= 0' failed.
    
    
  5. А в тесте test_strcat у вас undefined behavior.
    osboxes@osboxes:~/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02$ ./lab_02
    =================================================================
    ==4897==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffd1a1d9791 at pc 0x0000004011fd bp 0x7ffd1a1d9720 sp 0x7ffd1a1d9710
    WRITE of size 1 at 0x7ffd1a1d9791 thread T0
        #0 0x4011fc in my_strcat (/home/osboxes/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02/lab_02+0x4011fc)
        #1 0x400c53 in test_strcat (/home/osboxes/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02/lab_02+0x400c53)
        #2 0x4009d3 in main (/home/osboxes/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02/lab_02+0x4009d3)
        #3 0x7fcc5ca1282f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
        #4 0x4008f8 in _start (/home/osboxes/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02/lab_02+0x4008f8)
    
    Address 0x7ffd1a1d9791 is located in stack of thread T0 at offset 33 in frame
        #0 0x400b9c in test_strcat (/home/osboxes/cpp2019/cpp19/kozubaev.nurmukhammad/lab_02/lab_02+0x400b9c)
    
      This frame has 2 object(s):
        [32, 33) 'a' <== Memory access at offset 33 overflows this variable
        [96, 101) 'b'
    

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

  • Корректный makefile и структура папок +1

Стиль: увы, не больше 1/3 из-за практически отсутствующей корректности. Плюс:

  1. Вместо '\0' лучше использовать просто 0.
  2. Ставьте пробелы между for/while/if и следующей скобочкой: while (1), не while(1). Аналогично с else.
  3. Ставьте пробелы перед открывающей фигурной скобкой: while (1) {, а не while (1).
  4. Не оставляйте пустые строки в функциях, если только они не разделяют логические части функции.
  5. begin_s1 в итоге указывает не на начало s1 и не на "исходное" значение s1, а на что-то другое.
Note: See TracTickets for help on using tickets.