Opened 3 years ago
Closed 3 years ago
#306 closed ожидается проверка (задача сдана)
WW_vector_int
Reported by: | Наталья Марцинковская | Owned by: | Святослав Власов |
---|---|---|---|
Component: | WW_vector_int | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (4)
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
Валгринд больше не детектит ошибки, это хорошо :)
Но ошибки остались.
- У тебя
insert
не увеличивает размер вектора (_sz
), а должен resize
работает неправильно, он должен резервировать максимум междуnew_size
и2*_cp
памяти, а у тебя всегда резервируетсяnew_size
Тестируй тщательнее свой код перед отправкой! Не сложно ведь было запустить программу и потестировать функции, тем более CLI написан за вас. Ты бы легко отловила ошибку.
Итого 8/10.
comment:4 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Итак, валгринд надетектил целую кучу ошибок. Давай смотреть.
MyVector::reserve
должен резервировать доп. память, а не просто изменять поле_cp
MyVector::erase
иMyVector::insert
должны работать без выделения дополнительной памяти (если только вектору не требуется расширение в случае сinsert
)erase
ты выделяешь новый блок памяти, который меньше предыдущего и не меняешь значение_cp
, из-за чего последующие вставки могут привести к сегфолту.Ты, кажется, не совсем поняла логику зачем нужны
capacity
иsize
.capacity
-- это размер выделенной памяти, сколько элементов в вектор можно добавить без выделения дополнительной памяти, аsize
-- это количество уже добавленных в вектор элементов. То есть количество выделенной памяти должно строго соответствовать_cp
, а у тебя во многих функциях сначала меняется_cp
, а потом либо с памятью ничего не происходит, либо выделяется блок памяти совсем другого размера, нежели_cp
.