![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
urdnot |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 4.9.2014 Пользователь №: 4221 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Имеется следующая функция ,которая вызывается посредствам выбора пункта контекстного меню MyQGraphicsItem:
При выполнении программы выскакивает Segfault. Похоже после вызова removeItem QGraphicsView почему-то пытается его перерисовать, но на тот момент я уже освободил память под item. И вот как тут быть? Как удалить итем со сцены и освободить память. |
|
|
FireBlack |
![]()
Сообщение
#2
|
![]() Студент ![]() Группа: Участник Сообщений: 38 Регистрация: 17.10.2010 Из: г.Пенза Пользователь №: 2121 Спасибо сказали: 13 раз(а) Репутация: ![]() ![]() ![]() |
При выполнении программы выскакивает Segfault. Похоже после вызова removeItem QGraphicsView почему-то пытается его перерисовать, но на тот момент я уже освободил память под item. Показывайте проект полностью, так сложно что то сказать. И вот как тут быть? Как удалить итем со сцены и освободить память. Со сцены item'ы убираются через QGraphicsScene::removeItem(QGraphicsItem * item) и после удаляются через обычный delete. Скорее всего у Вас где то закралась ошибка и без кода сложно сказать где именно. |
|
|
urdnot |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 4.9.2014 Пользователь №: 4221 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Item Point:
Раскрывающийся текст
Item Line: Раскрывающийся текст
И наконец MyGraphicsView: Раскрывающийся текст
Проблема в removePoint. |
|
|
FireBlack |
![]()
Сообщение
#4
|
![]() Студент ![]() Группа: Участник Сообщений: 38 Регистрация: 17.10.2010 Из: г.Пенза Пользователь №: 2121 Спасибо сказали: 13 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Сначала удалил объект, потом обращаешся к нему
|
|
|
FireBlack |
![]()
Сообщение
#6
|
![]() Студент ![]() Группа: Участник Сообщений: 38 Регистрация: 17.10.2010 Из: г.Пенза Пользователь №: 2121 Спасибо сказали: 13 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
urdnot |
![]()
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 4.9.2014 Пользователь №: 4221 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy it_p это итератор на указатель. Я освобождаю память на которую ссылается указатель , но итератор остается валидным, поэтому я могу по нему удалить элемент из QVector.
Я решил проблему. Во-первых в самом removePoint проводить изменения в нужном порядке (корень проблемы как оказалось совсем не здесь, но мне кажется эти ошибки тоже могут проявить себя): Раскрывающийся текст
И самая главная моя ошибка в Line: Раскрывающийся текст
Я не замечал эту ошибку потому-что она не проявлялась до того момента пока я не начал удалять точки. Как оказалось название темы почти не связано с решением. Тему можно закрывать. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 2.3.2025, 6:38 |