1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|||||||||||
1 | |||||||||||
Shared_str реализация - На выходе из деструктора падает программа12.08.2014, 21:07. Показов 1893. Ответов 21
Метки нет (Все метки)
Решил реализовать shared_str
для этого я создал класс контейнер store
0
|
12.08.2014, 21:07 | |
Ответы с готовыми решениями:
21
Программа падает во время работы деструктора Очередное деструктивное: при вызове деструктора все падает Реализация конструкторов и деструктора Реализация деструктора в классе list |
Модератор
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
|
|
12.08.2014, 21:26 | 2 |
Похоже, память под pObj не выделяется.
Кроме operator= нужен копиконструктор. И конструктор по умолчанию тоже должен инициализировать указатель (хотя бы нулем, тогда прежде, чем удалять проверьте его на нуль).
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
||||||
12.08.2014, 21:33 [ТС] | 3 | |||||
объект точно есть
копи конструктор
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
|
13.08.2014, 00:15 | 4 |
В этом конструкторе st еще ни на что не указывает. Разыменование мусорного указателя ведет к падению.
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
13.08.2014, 16:10 [ТС] | 5 |
Дело не в этом. Выше я уже описал проблему
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
13.08.2014, 16:23 | 6 |
MishaMoix, Покажите пример использования.
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
|
13.08.2014, 16:27 | 7 |
В этом в том числе. Ошибка там не одна.
Показывай весь код, чтобы можно было воспроизвести твою ситуацию.
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|||||||||||||||||||||||||||||||
14.08.2014, 16:31 [ТС] | 9 | ||||||||||||||||||||||||||||||
Главная
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
||||||
14.08.2014, 17:04 | 10 | |||||
MishaMoix, Откомментил что происходит:
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
14.08.2014, 18:02 [ТС] | 11 |
Можно тогда полюбопытствовать, когда я вызываю деструктор (delete) st я же вызываю то что стоит в фн ~Storage() или не так.
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
|
14.08.2014, 18:22 | 12 |
Да.
Добавлено через 13 минут Только помимо этого еще происходит освобождение памяти, которую занимает Storage. Т.к. в двух объектах a и b указатель после работы operator= указывает на один и тот же экземпляр Storage, то и освободить память мы пытаемся два раза, один из деструктора b, второй раз из a. А этого делать нельзя.
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
14.08.2014, 18:27 [ТС] | 13 |
Т.е. когда я вызвал (ну т.е. он сам вызвался по окончании main) его, по моему коду вызывается деструтор st, по его коду ничего не происходит (разве что вычитается единица) НО и еще в объекте st удаляется int counter (т.к. это не указатель и удаляется автоматом при удалении объекта)?
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
14.08.2014, 18:36 [ТС] | 15 |
Ну в общем проблема была решена тем что счетчик проверялся в shared_std
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
|
14.08.2014, 18:37 | 16 |
Сообщение было отмечено MishaMoix как решение
Решение
После отработки деструктора Storage, данные которые он хранит перестают быть доступными для обращения (т.к. память под объект освобождена). Т.е. ты конечно сможешь к ним обратиться, и даже возможно получишь адекватный результат, но это неопределенное поведение (т.е. может быть что угодно, например падение или вернутся какие-то левые данные) и делать так нельзя. Т.е. да, счетчик будет уничтожен при первом вызове ~Storage().
Ему еще нужно что-то сделать с неинициализированными указателями на Storage, т.к. конструктор копирования и оператор присваивания неадекватно себя ведут при том коде, который сейчас есть.
1
|
Avazart
|
14.08.2014, 18:40
#17
|
Не по теме: И опять же возникает вопрос почему класс не шаблонный ?
0
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
14.08.2014, 18:58 [ТС] | 18 |
Все спасибо. Т.е. при вызове деструктора мы говорим "окей комп, вот у меня объект, все переменные объекта мне не нужны забирай себе, а так же вызови деструкторы у др. объектов (которые объявлены через указатели)"
Добавлено через 38 секунд Ну я не ставил себе цель делать это шаблонным или с правильным названием
0
|
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
|
||||||
14.08.2014, 19:20 | 19 | |||||
MishaMoix, Если интересно, вот тебе небольшой пример:
Кликните здесь для просмотра всего текста
http://codepad.org/fXiO0PHo
2
|
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
|
|
14.08.2014, 19:41 [ТС] | 20 |
Я только не понял как и для чего swap?
0
|
14.08.2014, 19:41 | |
14.08.2014, 19:41 | |
Помогаю со студенческими работами здесь
20
Реализация класса (конструктора и деструктора) При выходе из функции падает приложение SIGSEGV Segmentation fault Реализация сохранения при выходе из программы Программа выдаёт ошибку при вызове деструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |