Opened 4 years ago
Closed 4 years ago
#862 closed ожидаются исправления (задача сдана)
WW #12
Reported by: | Milyausha Sabirova | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_vector | Version: | 3.0 |
Keywords: | Cc: |
Description
У меня ничего не работает, поэтому класс Product и тесты не дописаны. Постараюсь исправить в ближайшее время.
Change History (6)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Папка obj лишняя
{lab_12}[2017]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12 Updating '.': At revision 3626. {lab_12}[2018]$ ls CMakeLists.txt include Makefile obj src
Команда make
не собирает решение
{lab_12}[2019]$ make make: /usr/local/Cellar/cmake/3.15.5/bin/cmake: Command not found Makefile:176: recipe for target 'cmake_check_build_system' failed make: *** [cmake_check_build_system] Error 127 {lab_12}[2020]$ mkdir build && cd build {build}[2021]$ cmake .. && make -- The C compiler identification is GNU 9.2.1 -- The CXX compiler identification is GNU 9.2.1 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/g++ -- Check for working CXX compiler: /usr/bin/g++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build Scanning dependencies of target lab_12 [ 50%] Building CXX object CMakeFiles/lab_12.dir/src/main.cpp.o [100%] Linking CXX executable lab_12 [100%] Built target lab_12
Собственные тесты не проходят (ошибки при работе с памятью)
{build}[2022]$ valgrind ./lab_12 ==758== Memcheck, a memory error detector ==758== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==758== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==758== Command: ./lab_12 ==758== TEST #1 SUCCESS TEST #2 ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401D8C: my_vector::my_vector<product::Product>::push_back(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401443: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401FF6: my_vector::my_vector<product::Product>::reserve(unsigned long) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401D40: my_vector::my_vector<product::Product>::push_back(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401456: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401D8C: my_vector::my_vector<product::Product>::push_back(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401456: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401D8C: my_vector::my_vector<product::Product>::push_back(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401469: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401E8D: my_vector::my_vector<product::Product>::my_vector(my_vector::my_vector<product::Product> const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x4014FE: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401FF6: my_vector::my_vector<product::Product>::reserve(unsigned long) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401581: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== ==758== Conditional jump or move depends on uninitialised value(s) ==758== at 0x4C30F78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==758== by 0x400F20: product::Product::Product(product::Product const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x401E8D: my_vector::my_vector<product::Product>::my_vector(my_vector::my_vector<product::Product> const&) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x40257E: my_vector::my_vector<product::Product>::resize(unsigned long) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x40217B: my_vector::my_vector<product::Product>::clear() (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x4015F1: void test_my_vector<product::Product>(product::Product, product::Product) (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== by 0x400DCB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_12/build/lab_12) ==758== SUCCESS TEST #3 SUCCESS ==758== ==758== HEAP SUMMARY: ==758== in use at exit: 72,775 bytes in 17 blocks ==758== total heap usage: 37 allocs, 20 frees, 78,027 bytes allocated ==758== ==758== LEAK SUMMARY: ==758== definitely lost: 71 bytes in 16 blocks ==758== indirectly lost: 0 bytes in 0 blocks ==758== possibly lost: 0 bytes in 0 blocks ==758== still reachable: 72,704 bytes in 1 blocks ==758== suppressed: 0 bytes in 0 blocks ==758== Rerun with --leak-check=full to see details of leaked memory ==758== ==758== For counts of detected and suppressed errors, rerun with: -v ==758== Use --track-origins=yes to see where uninitialised values come from ==758== ERROR SUMMARY: 14 errors from 7 contexts (suppressed: 0 from 0)
Основные замечания коду:
- много дублирования, нужно выносить в приватные функции логику инициализации/удаления/копирования подмассива элементов;
- лишние копирования вместо перемещений (e.g. resize).
Баллы: 1.5, доделывайте. Как минимум нужно, чтобы тесты проходили и std::move'ы были добавлены в реализацию вектора в нужных местах.
comment:4 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
у меня не получилось нормально отдебажить код, поэтому тесты работают только для интов :(
comment:5 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
(Некоторые) замечания:
- my_vector.h использует std::ostream, но не подключает его -> ошибка компиляции с внешним main.cpp;
- не компилируется такой код:
my_vector::my_vector<int> vi1, vi2; vi1 = vi2;
- не компилируется такой код:
my_vector::my_vector<int> vi; const my_vector::my_vector<int> cvi; vi = cvi;
- падает такой код:
my_vector::my_vector<int> vi; assert(vi.size() == 0); vi.push_back(1); assert(vi.size() == 1);
my_vector.h
- 16: не хватает кое-какого модификатора;
my_vector_impl.h
- 17, 18: что-то здесь не так:
try { for (; i < n; i++) {} new(array_ + i)T(); } ...
- 57: неясно, что пытаетесь сделать: вызвать конструктор вектора от указателя на вектор? Но такой конструктор не определен.
- 57: зачем нужна копия other (если хотели сделать копию), если ниже поля this свопаются с полями other?
- 116: все еще не хватает move'ов в методе; подсказка: перемещающие op= у Т noexcept, при определенной смене последовательности операций в методе, можно копирование заменить перемещением;
- много дублирования (см. предыдущий разбор).
Баллы: 2. Протестируйте хорошо (напишите больше тестов) базовую функциональность вектора. Можно доделывать до 23.03.
Ок, доделывайте или задавайте конкретные вопросы по реализации.