Opened 4 years ago

Closed 4 years ago

#878 closed ожидаются исправления (задача сдана)

WW #12

Reported by: gordeeva.tatyana Owned by: Артур Гулецкий (huletski)
Component: WW_vector Version: 1.0
Keywords: Cc:

Description

Я не использую strncpy, потому что для него мне нужен был strlen, но на strlen ругался valgrind. На StackOverflow? пишут, что это баг валгринда, и его нужно обновить, но я в итоге просто оставила strcpy

Change History (3)

comment:1 Changed 4 years ago by gordeeva.tatyana

Owner: changed from Evgeny Linsky to Артур Гулецкий (huletski)
Status: newassigned

comment:2 Changed 4 years ago by Артур Гулецкий (huletski)

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

(Некоторые) замечания:

Common

  • в my_vector*.h отсутствуют подключения необходимых header'ов -> с custom main.cpp решение не компилируется. Сейчас я локально допишу недостающие, в следующий раз на ошибке такого рода проверка на итерации завершится;
  • не компилируется такой код:
    my_vector::my_vector<int> v1, v2;
    v1 = std::move(v2);
    
  • move ctor вектора в списке инициализации копирует other.h, в то время как copy ctor у my_vector_holder запрещен;
  • capacity всегда должна быть минимальной достаточной степенью двойки по условию;

my_vector_impl.h

  • 15: нарушаются строгие гарантии: кто освободит array и уже инициализированные элементы в случае исключения?
  • 36: same. неясно кто деструкторы вызовет у уже скопированных?
  • не хватает std::move'ов (e.g. reserve);
  • дублирование функциональности вида "инициализировать/скопировать/удалить значения в интервале массива".

main.cpp

Я не использую strncpy, потому что для него мне нужен был strlen, но на strlen ругался valgrind. На StackOverflow?? пишут, что это баг валгринда, и его нужно обновить, но я в итоге просто оставила strcpy.

Таки может не зря ругается? Такой код, если пробую скомпилировать:

product::Product p1("blah blah blah blah", 0, 0);
product::Product p2 = p1;

получаю

g++ -O2 -Wall -Werror -std=c++11 -Iinclude -c -MMD -o obj/main.o src/main.cpp
In file included from /usr/include/string.h:635,
                 from /usr/include/c++/9/cstring:42,
                 from src/main.cpp:2:
In function ‘char* strcpy(char*, const char*)’,
    inlined from ‘product::Product::Product(const char*, int, double)’ at src/main.cpp:16:19,
    inlined from ‘int main()’ at src/main.cpp:104:50:
/usr/include/x86_64-linux-gnu/bits/string3.h:110:33: error: ‘void* __builtin___memcpy_chk(void*, const void*, long unsigned int, long unsigned int)’ writing 20 bytes into a region of size 8 overflows the destination [-Werror=stringop-overflow=]
  110 |   return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
      |          ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
Makefile:17: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1

Надо чинить. С вас объяснение в чем проблема и почему нынешняя версия в main.cpp компилируется.


Баллы: 1.5, доделывайте. Обратите внимание на гарантии, move'ы, дублирование в коде вектора.

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

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

Дедлайн.

Note: See TracTickets for help on using tickets.