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 Дмитрий Лапшин (lapshin)

Owner: changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya)
Type: ожидается проверкаожидаются исправления

Неверное имя нейспейса. Твои заголовки не инклудят что им надо.

Не начинай с капасити 2, капасити 1 вполне норм.

У тебя действительно не бьются new/delete, потому что я явно говорил НЕ ДЕЛАТЬ new T[]. Это несовместимо с трюками которые мы делаем с placement-new. То есть как бы совместимо, но освободить эту память мы просто так не сможем.

4.

comment:2 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Owner: changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin)
Type: ожидаются исправленияожидается проверка

Починила вроде

comment:3 Changed 3 years ago by Дмитрий Лапшин (lapshin)

Owner: changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya)
Type: ожидается проверкаожидаются исправления

Инклуды не починила.

А так да, работает как часы.

Если сделала ==, сделай и != ;)

Подумай над дублированием кода или использованием стандартных функций.

9.

comment:4 Changed 3 years ago by Maria Kozlovtseva (kozlovceva.mariya)

Owner: changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin)
Type: ожидаются исправленияожидается проверка

Исправила инклуды

comment:5 Changed 3 years ago by Дмитрий Лапшин (lapshin)

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

Hehehe Nu_Takoe

10.

Note: See TracTickets for help on using tickets.