Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Unnamed_Hero от Июнь 25, 2008, 10:24



Название: Утечки памяти в простейшем приложении?
Отправлено: Unnamed_Hero от Июнь 25, 2008, 10:24
После того, как устал отлавливать утечки памяти в своей первой программе (учусь писать только), решил создать простое приложение - нарисовал форму в дизайнере, на форме только один tabWidget и menuBar с двумя пунктами меню. Натравил на него valgrind, и увидел, что утечки составляют 150 Kb...
Что я делаю не так? Или это нормально?

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "ui_mainwindow.h"
#include <QtGui>

class mainWindow : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
mainWindow(QWidget *parent=0);
~mainWindow();

};
#endif

Код:
#include "headers/mainWindow.h"


mainWindow::mainWindow (QWidget *parent)
:QMainWindow (parent)
{
setupUi (this);
setFixedSize(size());
this->move((QApplication::desktop()->width() - width()) / 2, (QApplication::desktop()->height() - height()) / 2);
}

mainWindow::~mainWindow()
{

}


Код:
#include "headers/mainWindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));
mainWindow *dialog = new mainWindow;

dialog->show();

return app.exec();
}


Название: Re: Утечки памяти в простейшем приложении?
Отправлено: Godfather от Июнь 25, 2008, 12:10
какая версия Qt? и что окуда у тебя утекает?


Название: Re: Утечки памяти в простейшем приложении?
Отправлено: Unnamed_Hero от Июнь 25, 2008, 12:22
Qt 4.3.4, Linux

Например, утечка в mainWindow *dialog = new mainWindow;
или в QApplication app(argc, argv);

А в остальном - в компонентах Qt...


Название: Re: Утечки памяти в простейшем приложении?
Отправлено: pastor от Июнь 25, 2008, 13:11
Это проблема не в Qt

Варианты решиния:

1) Установи аттрибут Qt::WA_DeleteOnClose для mainWindow

Код:
mainWindow::mainWindow (QWidget *parent)
:QMainWindow (parent)
{
setupUi (this);
setAttribute(Qt::WA_DeleteOnClose);
            setFixedSize(size());
this->move((QApplication::desktop()->width() - width()) / 2, (QApplication::desktop()->height() - height()) / 2);
}

2) Создавай экземпляр mainWindow в стеке

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF8"));

mainWindow dialog;
dialog.show();

return app.exec();
}

Вобщем учим матчасть ;)


Название: Re: Утечки памяти в простейшем приложении?
Отправлено: Unnamed_Hero от Июнь 25, 2008, 14:18
Спасибо. Просто в учебнике по Qt4 (Жасмин Бланшет, Марк Саммерфилд, QT4, программирование GUI на С++) этого в примерах нет.


Название: Re: Утечки памяти в простейшем приложении?
Отправлено: Unnamed_Hero от Июль 01, 2008, 09:37
Всё же исправлюсь - в этой книге есть этот момент. :)