0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 3
|
||||||
1 | ||||||
Ошибка при вызове деструктора (при вызове delete в деструкторе)23.10.2018, 17:37. Показов 3102. Ответов 22
Метки нет (Все метки)
Не могу найти ошибку, при вызове деструктора от класса, который был создан при помощи конструктора с параметром const String &, возникает ошибка - не работает delete[]. Остальные деструкторы для других классов работают нормально.
Код:
0
|
23.10.2018, 17:37 | |
Ответы с готовыми решениями:
22
При вызове деструктора в строке delete[] data выбрасывается исключение Ошибка при вызове деструктора Ошибка при вызове деструктора Ошибка при вызове деструктора |
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.10.2018, 00:56 | 2 |
Кто это вас так делать научил? Это неверно для автоматических объектов, уберите.
0
|
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 3
|
|
24.10.2018, 17:05 [ТС] | 3 |
Нас учил так делать семинарист. Эта программа может обойтись без деструкторов?
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
24.10.2018, 17:20 | 4 |
вообще нет, в вашем случае вероятно да..
у вас же есть поле length
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
24.10.2018, 17:47 | 6 |
Да, для объектов созданных на стеке он вызовется автоматически как только выдете за пределы видимости.
1
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.10.2018, 18:10 | 7 |
Деструкторы вызываются автоматически для автоматических объектов. Они поэтому и называются - автоматические.
Сами деструкторы нужны, конечно же. Но вот вызывать их явно вы не должны, о чем я вам выше и сказал. Добавлено через 2 минуты Собственно ошибка в том, что компилятор все равно будет генерировать код автоматического вызова деструктора для ваших объектов. Не смотря на ваш явный вызов. Отсюда получаем ошибку двойного освобождения памяти, которая у вас проявилась вот так Добавлено через 1 минуту Если он вас именно так учил, то с прискорбием можно заключить, что язык C++ он не знает. С прискорбием для вас, конечно же. Вам же у него и дальше учиться, я так понимаю.
2
|
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
|
|
24.10.2018, 18:21 | 8 |
1
|
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 3
|
|
24.10.2018, 21:33 [ТС] | 9 |
Всем большое спасибо!
0
|
Вездепух
12761 / 6644 / 1788
Регистрация: 18.10.2014
Сообщений: 16,801
|
|
24.10.2018, 21:41 | 10 |
В дополнение к уже сказанному: почему здесь
length вдруг получает значение 1 ?Это, в частности, приведет в неправильной работе всех методов, которые используют значение length из сконструированного по умолчанию объекта.
0
|
Неэпический
|
||||||
24.10.2018, 21:47 | 11 | |||||
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
25.10.2018, 12:59 | 12 |
Его нужно использовать если выделяете и создаете объект в куче, а не на стеке. И тогда его использование облегчит жизнь - на нужно будет вызывать удаление по указателю объекта самостоятельно(т.к у объекта unique_ptr так же будет автоматически вызван деструктор после выхода из зоны видимости, т.к этот объект на стеке.). И это скорее совет "нужно использовать", что в конечном итоге вовсе и не обязательно )
Добавлено через 2 минуты Кажется Вы заблуждаетесь(или ткните меня носом), strLen вернет длину не включая символа "конец строки" Добавлено через 2 минуты
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
25.10.2018, 13:01 | 13 | |||||
aLarman,
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
25.10.2018, 13:04 | 14 |
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
25.10.2018, 13:07 | 15 |
Не по теме: Что то не понимаю сути вопроса, как это что то доказывает или опровергает? Добавлено через 2 минуты
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
25.10.2018, 13:10 | 16 |
Автоматические объекты = объекты с automatic storage duration.
Точно так же как статические объекты = объекты со static storage duration. Т.е. когда говорят статические объекты - вас это не смущает, а с автоматическими вдруг накладка вышла? Или у вас просто норма выработки по буквоедству на сегодня не выполнена? Тогда спешу вас расстроить: я в этой теме не давал формальных определений, чтобы к ним можно было так придираться.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
25.10.2018, 13:12 | 17 |
Не по теме: Так и быть уточню, НЕ включая l переписаны символы Добавлено через 1 минуту
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
25.10.2018, 13:13 | 18 |
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
25.10.2018, 13:35 | 19 | |||||
aLarman,
Вернет без, но именно в той строке(вернее после выхода из цикла) на позиции l в массиве to_str действительно уже будет записан '\0'. Зачем еще раз его туда писать?) Добавлено через 13 минут
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
25.10.2018, 13:36 | 20 |
А я вот свою не выполнил, так что вот вам аргументы:
В стандарте их тоже так называют периодически. Потому что эти фразы синонимичны по принципу, указанному выше:
0
|
25.10.2018, 13:36 | |
25.10.2018, 13:36 | |
Помогаю со студенческими работами здесь
20
Ошибка при вызове деструктора Ошибка при вызове деструктора Ошибка при вызове деструктора Ошибка при вызове деструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |