![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() |
![]() |
![]() |
![]() |
#13 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Дважды объект не удаляю. Попробую избавиться от всех операций new/delete.
Мне вот не понятно, как вот эту часть Код:
|
![]() |
![]() |
![]() |
#14 | |
C/C++ advanced
Пользователь
Регистрация: 17.11.2011
Сообщений: 17
|
![]() Цитата:
За "хлеб и воду" не работаю
|
|
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
Вот что выводит отладчик
http://ipic.su/img/img7/fs/11.1439719976.png http://ipic.su/img/img7/fs/22.1439720172.png http://ipic.su/img/img7/fs/33.1439720290.png В строках 8, 9, 10 отладчик указывает на файл stl_vector.h. Внутри класса Map много векторных данных. Мне не понятно отладчик говорит что проблема с каким-то вектором (членом класса Map)? Не разбираюсь я в сообщениях отладчика=( |
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Тут уже всё упало в векторе, толку от этой отладки ноль.
Берем проблемный деструктор. Ставим бряк (breakpoint, точка останова) на первую строку, построчно выполняем деструктор, пока не узнаем в какой именно строке падает. Смотрим чего происходит в этой строке, переходим в вызываемый в ней метод и так же построчно смотрим где именно падает. Таким образом узнаем при какой именно операции что-то идёт не так. От того, что сейчас что-то там падает в недрах вектора ни холодно, ни жарко. Нужно определить при удалении каких именно данных всё падает и потом смотреть кто еще эти данные трогает и кто их мог поломать. Можно вообще проблемное удаление пока закомментить (хоть всё тело деструктора), чтобы посмотреть будет ли что-то еще сыпаться. Последний раз редактировалось pu4koff; 16.08.2015 в 14:47. |
![]() |
![]() |
![]() |
#17 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]()
pu4koff
Сделал как посоветовали. Если breakpoint стоит где-то внутри деструктора, то segmentation fault не происходит. По ходу действительно объект удаляется дважды. Только вот как так происходит что он удаляется дважды я так и не понял. Если деструктор закоментировать, то segmentation fault происходит в объявлении класса, тут Код:
не избавишся, по описанию у тебя неверный дизайн, который приводит к двойному удалению Вот код работы с классом Map * Karta; Код:
Коротко описал дизайн кода. Сам в правильности дизайна не разбираюсь=( |
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Отладчик должен уметь показывать call stack.
Ставьте breakpoint в деструкторе и смотрите по стеку откуда идут вызовы удаления. |
![]() |
![]() |
![]() |
#19 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Конструкторы копии везде реализованы свои с правильным поведением?
|
![]() |
![]() |
![]() |
#20 | |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
![]() Цитата:
Вызываю внутри класса Map. Функции передаю указатель this на данный класс чтобы можно было работать с этим классом из другого потока. Код:
Код:
Пробовал также запускать программу с закоментированным Код:
Не знаю что означает "с правильным поведением". |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ vector segmentation fault | Misa | Помощь студентам | 4 | 08.01.2015 19:02 |
Segmentation fault | Hemul | Общие вопросы C/C++ | 7 | 16.08.2011 03:23 |
Vector, Pair и segmentation fault | certman | Общие вопросы C/C++ | 3 | 25.03.2010 00:24 |
QT4 segmentation fault | jojahti | Qt и кроссплатформенное программирование С/С++ | 6 | 06.01.2010 09:57 |
GCL и segmentation fault. | jojahti | Свободное общение | 0 | 14.09.2009 19:20 |