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: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Не собралось.
Во-первых, потому что у тебя в операторе[] была написана какая-то глупость: return &(array_[index]);
. Почему у тебя функция, в сигнатуре которой написано, что она возвращает Т по значению, в теле зачем-то возвращает указатель?
Во-вторых, не собралось потому, что конструктор копирования вызывает сначала ресайз, который создает пустые объекты, а потом поверх уже созданных объектов создает копии. Во-первых, это утечки потому что конструкторы для созданных объектов не были вызваны, а во-вторых это требует от типа Т конструктора по умолчанию без параметров, а класс Т может его не иметь. В задании есть про это уточнение.
После исправлений собралось.
Упал тест на ресайз с ошибками валгринда -- что-то течет (похоже что ты не учитываешь, что размер может уменьшаться в меньшую сторону и не освобождаешь объекты)
Все тесты на гарантии исключений тоже повалились.
5/10
Компиляция упала. По следующим причинам:
Во-первых, опечатки в операторе присваивания. Шаблонные методы не компилируются, если они нигде не вызываются. Помни об этом когда проверяешь свой код.
Во-вторых, твой my_vector.h не инклюдит заголовочники от которых зависит.
<iostream>
в данном случаеВ-третьих, не хватает константного оператора[]. Поэтому код, имеющий вектор по константной ссылке, не может его использовать.
В-четвертых, вектор не должен требовать наличия конструктора без параметров в случае, если он не создает пустых объектов (а это возможно только при вызове resize и конструктора от числа), а у тебя требует (т.к. push_back вызывает resize). А еще требует наличие оператора присваивания, чего тоже быть не должно.
Далее попадали почти все тесты.
Одна из причин сегфолтов вот здесь:
Ты пытаешься освободить память под каждый элемент массива. При том что сам массив ты выделяла как буфер
char
-ов. Деструктор у объекта так не вызывается. Вот --array_[i].~T();
. На практике я это показывал и объяснял.Другая причина сегфолтов в
push_back
-- ты просто лезешь не в свою память там регулярно. Запускай под дебаггером и/или валгриндом и ищи баг.Пока это 3/10