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 Артур Гулецкий (huletski)

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

Ок, доделывайте или задавайте конкретные вопросы по реализации.

comment:2 Changed 4 years ago by Milyausha Sabirova

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

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

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 Milyausha Sabirova

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

у меня не получилось нормально отдебажить код, поэтому тесты работают только для интов :(

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

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.

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

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

Дедлайн.

Note: See TracTickets for help on using tickets.