Название: Проблемы с qwtplotmarker Отправлено: dimbor от Август 16, 2017, 14:50 Доброго времени суток.
Писал программу, выводяющую векторную диаграмму на график. При создании векторной диаграммы использовал массив qwtplotmarker'ов: Код: QwtPlotMarker markers_array[1024]; На графике все 1024 точки отображаются прекрасно. Но возникает проблема при закрытии программы - постоянно вылетает ошибка памяти, как будто все указатели на маркеры теряются и он не может их удалить. Да и когда я пытаюсь сделать detach, никакой реакции не происходит. Собственно вопрос - каким образом нужно правильно удалять весь массив маркеров? Название: Re: Проблемы с qwtplotmarker Отправлено: gil9red от Август 16, 2017, 16:20 Интересно, а если закрывать программу через qApp->quit() (главное не забыть #include <QApplication>) ошибка тоже будет? :D
Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 16, 2017, 16:36 Вызов delete с передачей указателя на QwtPlotMarker в деструкторе QwtPlot
Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 16, 2017, 16:47 Предлагаю в деструкторе QwtPlot наследника вызывать detachItems (http://qwt.sourceforge.net/class_qwt_plot_dict.html#acb2e402e05c693433ed7e84696fbdfc0) (QwtPlotItem::Rtti_PlotMarker (http://qwt.sourceforge.net/class_qwt_plot_item.html#ab149ac85e233ce9cedf2f2f2af871bf3af1fb53ddb320ecbf2bba00a323cf08ff), false);
Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 16, 2017, 16:50 Ещё можно перед вызовом ~QwtPlot() пробежаться по массиву маркеров и для каждого вызвать detach (http://qwt.sourceforge.net/class_qwt_plot_item.html#ab2bbee6dbe36a5f1d0ce853ac66716a6). Имхо, так даже правильнее будет.
Название: Re: Проблемы с qwtplotmarker Отправлено: dimbor от Август 16, 2017, 17:06 Ещё можно перед вызовом ~QwtPlot() пробежаться по массиву маркеров и для каждого вызвать detach (http://qwt.sourceforge.net/class_qwt_plot_item.html#ab2bbee6dbe36a5f1d0ce853ac66716a6). Имхо, так даже правильнее будет. В деструкторе плота? Для этого, получается, надо переопределять весь график? Или как-то можно до него добраться, если он в дизайнере объявлен? Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 17, 2017, 09:08 В деструкторе класса, который хранит markers_array[1024];
Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 17, 2017, 09:10 Есть ещё вариант создавать экземпляры в динамической памяти с помощью оператора new. Тогда ответственность за освобождение памяти будет у QwtPlot при связывании маркеров с ним.
Название: Re: Проблемы с qwtplotmarker Отправлено: dimbor от Август 17, 2017, 16:39 К сожалению, описанные способы не помогли. Ошибка каждый раз вылетает в этом месте:
Код: ~PrivateData() Перепробовал все, включая и создание при помощи new. Ошибка продолжает упорно действовать на нервы. Название: Re: Проблемы с qwtplotmarker Отправлено: __Heaven__ от Август 17, 2017, 21:28 Выложите минимальный компилябельный проект
|