Заблокирован
|
||||||
1 | ||||||
Исправить оишбку в коде10.03.2013, 11:33. Показов 447. Ответов 4
Метки нет Все метки)
(
Код:
0
|
|
10.03.2013, 11:33 | |
Ответы с готовыми решениями:
4
Выводит стандарт. оишбку несмотря на Try-Except Как исправить исправить ошибку в коде
Исправить недочеты в коде |
328 / 327 / 92
Регистрация: 16.12.2012
Сообщений: 544
|
||||||
10.03.2013, 12:32 | 2 | |||||
добавьте конструктор копирования
1
|
Заблокирован
|
|
15.03.2013, 11:18 [ТС] | 4 |
собственно, я смотрел в отладки, после выхода из функции, вызывался деструктор, такой вопрос. зачем тут конструктор копирования?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
15.03.2013, 14:02 | 5 | |||||
Деструктор здесь не при чём. Вы передаёте в функцию объект по значению, из-за этого проблемы. Память под копией name_ освобождается. Потом опять вызов функции, опять создаётся копия name_, по адресу в name_ уже муссор (что и выводится), при выходе из функции попытка освободить уже освобождённую память. Или передавайте объект по ссылке, или сделайте эту функцию методом класса.
Добавлено через 1 час 25 минут Потому что конструктор копирования по умолчанию делает поверхностное копирование, т.е. просто копирует поля класса. Если там указатель, то копируется сам указатель, а не то, на что он указывает. В таких случаях определяют конструктор для глубокого копирования. Тогда у временных объектов будут свои указатели и своя память под ними, и не будет двойного освобождения памяти, как в этом случае. Добавляете вот такой конструктор копирования и ошибка исчезнет:
1
|
15.03.2013, 14:02 | |
15.03.2013, 14:02 | |
Помогаю со студенческими работами здесь
5
Исправить ошибки в коде Исправить ошибки в коде Исправить ошибку в коде Исправить ошибки в коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |