Opened 3 years ago
Closed 3 years ago
#533 closed ожидается проверка (задача сдана)
WW_vector kozlovceva.mariya lab_11
Reported by: | Maria Kozlovtseva (kozlovceva.mariya) | Owned by: | Дмитрий Лапшин (lapshin) |
---|---|---|---|
Component: | WW_vector | Version: | |
Keywords: | Cc: |
Description
Я долго искала ошибку, поэтому там комментарии остались на случай, если ещё искать надо будет.
Там была проблема с тем, что при удалении элемента из массива мы вызываем деструктор для него и тогда освобождается память name для удаляемого Product _array[i]. Но потом мы хотим сделать добавление элемента на то же место, и так как память там всё ещё выделена (мы только деструктор вызывали), он запускает не конструктор копий для создания элемента, а оператор присваивания. А в операторе присваиания хотелось бы освобождать память, которая для name того, в кого присваиваем.
Я убрала этот delete [] name (в комментариях остался, гляньте) и всё заработало. А до этого программа вела себя ооооочень странно: работала по-разному, хотя я только cout добавляла для дебага.
Объясните, пожалуйста, почему так вообще.
Ну то есть я понимаю, что видимо это двойное освобождение памяти и это плохо, но непонятно, как с этим бороться.
Просто в этой программе есть присваивание в массив только на освобожденное место, и, видимо, если появилось бы присваивание как замена элемента массива, то надо было бы прямо в саму функцию добавить освобождение памчти там, а потом уже вызвать присваивание.
Change History (5)
comment:1 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Починила вроде
comment:3 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Инклуды не починила.
А так да, работает как часы.
Если сделала ==, сделай и != ;)
Подумай над дублированием кода или использованием стандартных функций.
9.
comment:4 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Исправила инклуды
comment:5 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Hehehe Nu_Takoe
10.
Неверное имя нейспейса. Твои заголовки не инклудят что им надо.
Не начинай с капасити 2, капасити 1 вполне норм.
У тебя действительно не бьются new/delete, потому что я явно говорил НЕ ДЕЛАТЬ new T[]. Это несовместимо с трюками которые мы делаем с placement-new. То есть как бы совместимо, но освободить эту память мы просто так не сможем.
4.