[vtkusers] vtkImageReslice memory leak with QT

ysa0829 ysa0829 at gmail.com
Thu Apr 5 23:15:58 EDT 2012


Dear all,

I found that there might exist memory leak problem when using
vtkImageReslice along with QT class "QFileSystemModel"

Following is a simple testing program using VTK 5.8.0, QT 4.8.1 compiled
under VS2010 as 32 bit release running under 64 bit Win7 environment.

header file:

//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
#ifndef QTENVIRONMENT_H
#define QTENVIRONMENT_H

#include <QtGui/QMainWindow>
#include "ui_qtenvironment.h"

class vtkImageData;
class QTEnvironment : public QMainWindow
{
	Q_OBJECT

public:
	QTEnvironment(QWidget *parent = 0, Qt::WFlags flags = 0);
	~QTEnvironment();

	vtkImageData *image;
	QFileSystemModel *model;
private:
	Ui::QTEnvironmentClass ui;

public slots:
	void testcode1();
};

#endif // QTENVIRONMENT_H
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//

.cpp file:

//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
#include "stdafx.h"
#include "qtenvironment.h"
#include "vtkDICOMImageReader.h"
#include "vtkImageReslice.h"
#include "vtkImageData.h"
QTEnvironment::QTEnvironment(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	ui.setupUi(this);
	QObject::connect(this->ui.actionTestcode1, SIGNAL(triggered()), this,
SLOT(testcode1()));

	image = vtkImageData::New();

	//doing this code causes memory leak
	model = new QFileSystemModel(this);
	QStringList filters;
	filters << "*.dcm";		
	model->setFilter( QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot );
	model->setNameFilters(filters);
	model->setNameFilterDisables(false);
}
QTEnvironment::~QTEnvironment()
{
	image->Delete();
	model->deleteLater();	
}

void QTEnvironment::testcode1()
{
	//loading image
	std::string folder = "c:\\1";//DICOM PATH
	vtkDICOMImageReader *reader = vtkDICOMImageReader::New();
	reader->SetDirectoryName(folder.c_str());
	reader->FileLowerLeftOn();
	reader->Update();

	//deepcopy 
	image->DeepCopy(reader->GetOutput());
	reader->Delete();

	//ImageResliceTest
	for(int i =0; i< 100000000000000;i++)
	{		
		vtkImageReslice *reSlice = vtkImageReslice::New();
		reSlice->SetInput(image);
		reSlice->SetInterpolationModeToCubic();
		reSlice->SetOutputSpacing(0.5, 0.5,0.5);
		reSlice->SetOutputOrigin(0, 0, 0);
		reSlice->SetOutputExtent(0, 10, 0, 10, 0, 0);
		reSlice->Update();
		reSlice->Delete();
	}
}
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//

While I used vtkImageReslice alone (new one instance and delete it) without
running QT class "QFileSystemModel", there wasn't memory leak problem any
more as follows:

//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
for(int i = 0 ; i < 100000000000000 ; i++)
	{		
		vtkImageReslice *reSlice = vtkImageReslice::New();
		reSlice->SetInput(image);
		reSlice->SetInterpolationModeToCubic();
		reSlice->SetOutputSpacing(0.5, 0.5,0.5);
		reSlice->SetOutputOrigin(0, 0, 0);
		reSlice->SetOutputExtent(0, 10, 0, 10, 0, 0);
		reSlice->Update();
		reSlice->Delete();
	}
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//

Yet when I new one "QFileSystemModel" instance in the code, however with
nothing related to the code regarding "vtkImageReslice", then I performed
the code as above, each time I new "vtkImageReslice" then delete it, there
will be about 100 k memory leak adding up.

//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
	//doing this code causes memory leak
 	model = new QFileSystemModel(this);
 	QStringList filters;
 	filters << "*.dcm";		
 	model->setFilter( QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot );
 	model->setNameFilters(filters);
 	model->setNameFilterDisables(false);
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//	

Please help, thanks in advance!

Anne.


--
View this message in context: http://vtk.1045678.n5.nabble.com/vtkImageReslice-memory-leak-with-QT-tp5621969p5621969.html
Sent from the VTK - Users mailing list archive at Nabble.com.



More information about the vtkusers mailing list