diff options
author | Heikkinen Miikka <miikka.heikkinen@digia.com> | 2013-09-20 12:51:17 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-20 12:56:27 +0300 |
commit | d57aabe85e6b4012f93348884df16262889906d8 (patch) | |
tree | 4890063e229d89afbf5ba140068ecd4d656ccb58 | |
parent | 0d74bd964a2f63c303cc03d83c1ae02991b8e0ec (diff) |
Fixed Valgrind reported memory issues.
Change-Id: I9ccb460b5cceb969827ede510b3c05d07467358d
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r-- | examples/barchart/main.cpp | 18 | ||||
-rw-r--r-- | src/datavisualization/data/qsurfacedataproxy.cpp | 21 | ||||
-rw-r--r-- | src/datavisualization/data/qsurfacedataproxy_p.h | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/q3dcamera.cpp | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 5 |
6 files changed, 37 insertions, 14 deletions
diff --git a/examples/barchart/main.cpp b/examples/barchart/main.cpp index d8bfa5b4..b71f9831 100644 --- a/examples/barchart/main.cpp +++ b/examples/barchart/main.cpp @@ -212,8 +212,8 @@ int main(int argc, char **argv) { QApplication app(argc, argv); - QWidget *widget = new QWidget; - QVBoxLayout *layout = new QVBoxLayout(widget); + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout(&widget); Q3DBars *chart = new Q3DBars(); QSize screenSize = chart->screen()->size(); @@ -224,9 +224,9 @@ int main(int argc, char **argv) container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); container->setFocusPolicy(Qt::StrongFocus); - widget->setWindowTitle(QStringLiteral("Hours playing banjo")); + widget.setWindowTitle(QStringLiteral("Hours playing banjo")); - QTableWidget *tableWidget = new QTableWidget(widget); + QTableWidget *tableWidget = new QTableWidget(&widget); tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); tableWidget->setAlternatingRowColors(true); @@ -240,15 +240,15 @@ int main(int argc, char **argv) QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), mapping); chart->setActiveDataProxy(proxy); - ChartDataGenerator *generator = new ChartDataGenerator(chart, tableWidget); + ChartDataGenerator generator(chart, tableWidget); - QObject::connect(chart, &Q3DBars::selectedBarPosChanged, generator, + QObject::connect(chart, &Q3DBars::selectedBarPosChanged, &generator, &ChartDataGenerator::selectFromTable); - QObject::connect(tableWidget, &QTableWidget::currentCellChanged, generator, + QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator, &ChartDataGenerator::selectedFromTable); - widget->show(); - generator->start(); + widget.show(); + generator.start(); return app.exec(); } diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp index 8471bb7e..30cc84f1 100644 --- a/src/datavisualization/data/qsurfacedataproxy.cpp +++ b/src/datavisualization/data/qsurfacedataproxy.cpp @@ -330,8 +330,7 @@ QSurfaceDataProxyPrivate::QSurfaceDataProxyPrivate(QSurfaceDataProxy *q) QSurfaceDataProxyPrivate::~QSurfaceDataProxyPrivate() { - m_dataArray->clear(); - delete m_dataArray; + clearArray(); } bool QSurfaceDataProxyPrivate::resetArray(QSurfaceDataArray *newArray, qreal minValueRows, @@ -341,8 +340,7 @@ bool QSurfaceDataProxyPrivate::resetArray(QSurfaceDataArray *newArray, qreal min if (!m_dataArray->size() && (!newArray || !newArray->size())) return false; - m_dataArray->clear(); - delete m_dataArray; + clearArray(); if (newArray) { for (int i = 0; i < newArray->size(); i++) { @@ -508,5 +506,20 @@ void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV maxValues.setZ(m_maxValueRows); } +void QSurfaceDataProxyPrivate::clearRow(int rowIndex) +{ + if (m_dataArray->at(rowIndex)) { + delete m_dataArray->at(rowIndex); + (*m_dataArray)[rowIndex] = 0; + } +} + +void QSurfaceDataProxyPrivate::clearArray() +{ + for (int i = 0; i < m_dataArray->size(); i++) + clearRow(i); + m_dataArray->clear(); + delete m_dataArray; +} QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/data/qsurfacedataproxy_p.h b/src/datavisualization/data/qsurfacedataproxy_p.h index 033a8a8f..8a60e93d 100644 --- a/src/datavisualization/data/qsurfacedataproxy_p.h +++ b/src/datavisualization/data/qsurfacedataproxy_p.h @@ -60,6 +60,9 @@ public: private: QSurfaceDataProxy *qptr(); + void clearRow(int rowIndex); + void clearArray(); + QSurfaceDataArray *m_dataArray; qreal m_minValueRows; qreal m_maxValueRows; diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index edb0d971..bf57f21f 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -52,6 +52,8 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller) : Abstract3DRenderer(controller), m_controller(controller), m_cachedIsSlicingActivated(false), + m_cachedRowCount(0), + m_cachedColumnCount(0), m_selectedBar(0), m_sliceSelection(0), m_sliceCache(0), diff --git a/src/datavisualization/engine/q3dcamera.cpp b/src/datavisualization/engine/q3dcamera.cpp index 229657fd..a3f46a17 100644 --- a/src/datavisualization/engine/q3dcamera.cpp +++ b/src/datavisualization/engine/q3dcamera.cpp @@ -74,7 +74,7 @@ void Q3DCamera::copyValuesFrom(const Q3DCamera &source) float *values = new float[16]; source.d_ptr->m_viewMatrix.copyDataTo(values); d_ptr->m_viewMatrix = QMatrix4x4(values); - delete values; + delete[] values; d_ptr->m_xRotation = source.d_ptr->m_xRotation; d_ptr->m_yRotation = source.d_ptr->m_yRotation; diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 308f449e..5fb4f114 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -142,6 +142,11 @@ Surface3DRenderer::~Surface3DRenderer() if (m_selectionPointer) delete m_selectionPointer; + + for (int i = 0; i < m_dataArray.size(); i++) + delete m_dataArray.at(i); + m_dataArray.clear(); + } void Surface3DRenderer::initializeOpenGL() |