код ошибки -1073741819 |
Здравствуйте, гость ( Вход | Регистрация )
код ошибки -1073741819 |
demaker |
5.2.2013, 14:03
Сообщение
#31
|
Студент Группа: Участник Сообщений: 73 Регистрация: 29.1.2013 Пользователь №: 3691 Спасибо сказали: 0 раз(а) Репутация: 0 |
нужно: 1) решить, какой класс управляет данными в массиве (в частности - в мапе, в списке) 2) инкапсулировать массив в этот класс с доступом private 3) сделать методы Clear(), DeleteItem(), .... , AddItem(), FindItem(), ... 4) из конструктора класса вызвать Clear() и не мучать себя и остальных и, естественно, никаких deleteLater ок -> понял И еще такой вопрос по поводу deleteLater. Как мне удалить график, который я добавил на виджет? Чуть подробнее можно. |
|
|
Алексей1153 |
5.2.2013, 14:07
Сообщение
#32
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
как удалить - это зависит от того, как добавлял.
К примеру, ты в какой-то момент времени создаёшь на куче через new и добавляешь к плоттеру (теперь плоттер САМ заботится об удалении графика - в деструкторе это произойдёт) . Если ты извлёк график (навроде removeitem) , то плоттер уже не заботится о его судьбе. Ты можешь сразу после извлечения удалить память графика при помощи delete - так как сам он не удалится. Но это просто утечка памяти, а не выпадение Придерживайся правила - где создал объект, там и удаляй. В одном классе. В двух методах одного класса (create/delete). В одном методе (на стеке, к примеру) . В одном потоке. Не надо делать так - в одном потоке создал, в другом удалил. В одном процессе. Это желательно Так меньше ошибок Сообщение отредактировал Алексей1153 - 5.2.2013, 14:10 |
|
|
lanz |
5.2.2013, 14:22
Сообщение
#33
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Так, а ларчик просто открывался
Все падает в ~CCOMTRADE, когда удаляются неинициализированные
Лечится добавлением в конструктор
Но вообще Алексей1153 дело говорит. И еще поменьше new/delete, а вместо них побольше QVector-ов. |
|
|
Алексей1153 |
5.2.2013, 14:26
Сообщение
#34
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ну, или std::vector / std::map (лично я кутешные контейнеры стараюсь не использовать, если только никак без этого)
тогда такие забывания просто не существуют |
|
|
demaker |
5.2.2013, 14:27
Сообщение
#35
|
Студент Группа: Участник Сообщений: 73 Регистрация: 29.1.2013 Пользователь №: 3691 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понятно, спасибо.
Но у меня вроде так и есть: деструктор:
одиночное удаление:
и создание:
Не могу понять что нето. Спасибо. Попробую заново переписать. |
|
|
Алексей1153 |
5.2.2013, 14:39
Сообщение
#36
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
вот это
должно выглядеть так (в первом приближении)
Сообщение отредактировал Алексей1153 - 5.2.2013, 14:40 |
|
|
demaker |
5.2.2013, 15:09
Сообщение
#37
|
Студент Группа: Участник Сообщений: 73 Регистрация: 29.1.2013 Пользователь №: 3691 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понятно.
Ну в item должен быть указатель на plot за этим я и создал TreeWidgetitem от QTreeWidgetitem но сигнал itemDoubleClicked(QTreeWidgetItem*,int) передает только QTreeWidgetItem*, поэтому приходится делать явное преобразование типов ((TreeWidgetItem*)item)->p lanz, Алексей1153 огромное спасибо ВАМ!!! |
|
|
Алексей1153 |
5.2.2013, 18:32
Сообщение
#38
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
demaker, не должно быть таких преобразований. Что-то не так делаешь
|
|
|
Текстовая версия | Сейчас: 24.4.2024, 14:03 |