Opened 3 years ago

Closed 3 years ago

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

WW #11

Reported by: Pavlova Aleksandra Owned by: Святослав Власов
Component: WW_vector Version: 2.0
Keywords: Cc:

Description

No tests, but I will make them as soon as possible.

Change History (3)

comment:1 Changed 3 years ago by Святослав Власов

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

Компиляция упала. По следующим причинам:
Во-первых, опечатки в операторе присваивания. Шаблонные методы не компилируются, если они нигде не вызываются. Помни об этом когда проверяешь свой код.
Во-вторых, твой my_vector.h не инклюдит заголовочники от которых зависит. <iostream> в данном случае
В-третьих, не хватает константного оператора[]. Поэтому код, имеющий вектор по константной ссылке, не может его использовать.
В-четвертых, вектор не должен требовать наличия конструктора без параметров в случае, если он не создает пустых объектов (а это возможно только при вызове resize и конструктора от числа), а у тебя требует (т.к. push_back вызывает resize). А еще требует наличие оператора присваивания, чего тоже быть не должно.

Далее попадали почти все тесты.

  1. Создание вектора от числа должно создавать n пустых объектов, а не только память резервировать. Это в задании сказано.
  2. Остальные тесты попадали по сегфолтам и дабл-фри
  3. Тесты на безопасность исключений тоже попадали, потому что ты их вообще никак не обрабатываешь

Одна из причин сегфолтов вот здесь:

	for (std::size_t i = 0; i < sz_; i++)
		delete (array_ + i);

Ты пытаешься освободить память под каждый элемент массива. При том что сам массив ты выделяла как буфер char-ов. Деструктор у объекта так не вызывается. Вот -- array_[i].~T();. На практике я это показывал и объяснял.
Другая причина сегфолтов в push_back -- ты просто лезешь не в свою память там регулярно. Запускай под дебаггером и/или валгриндом и ищи баг.

Пока это 3/10

comment:2 Changed 3 years ago by Pavlova Aleksandra

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

comment:3 Changed 3 years ago by Святослав Власов

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

Не собралось.
Во-первых, потому что у тебя в операторе[] была написана какая-то глупость: return &(array_[index]);. Почему у тебя функция, в сигнатуре которой написано, что она возвращает Т по значению, в теле зачем-то возвращает указатель?
Во-вторых, не собралось потому, что конструктор копирования вызывает сначала ресайз, который создает пустые объекты, а потом поверх уже созданных объектов создает копии. Во-первых, это утечки потому что конструкторы для созданных объектов не были вызваны, а во-вторых это требует от типа Т конструктора по умолчанию без параметров, а класс Т может его не иметь. В задании есть про это уточнение.

После исправлений собралось.
Упал тест на ресайз с ошибками валгринда -- что-то течет (похоже что ты не учитываешь, что размер может уменьшаться в меньшую сторону и не освобождаешь объекты)

Все тесты на гарантии исключений тоже повалились.

5/10

Note: See TracTickets for help on using tickets.