Russian Qt Forum
Ноябрь 23, 2024, 18:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Утечки памяти в простейшем приложении?  (Прочитано 5290 раз)
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();
}
Записан
Godfather
Гость
« Ответ #1 : Июнь 25, 2008, 12:10 »

какая версия Qt? и что окуда у тебя утекает?
Записан
Unnamed_Hero
Гость
« Ответ #2 : Июнь 25, 2008, 12:22 »

Qt 4.3.4, Linux

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

А в остальном - в компонентах Qt...
« Последнее редактирование: Июнь 25, 2008, 12:24 от Unnamed_Hero » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июнь 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();
}

Вобщем учим матчасть Подмигивающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Unnamed_Hero
Гость
« Ответ #4 : Июнь 25, 2008, 14:18 »

Спасибо. Просто в учебнике по Qt4 (Жасмин Бланшет, Марк Саммерфилд, QT4, программирование GUI на С++) этого в примерах нет.
Записан
Unnamed_Hero
Гость
« Ответ #5 : Июль 01, 2008, 09:37 »

Всё же исправлюсь - в этой книге есть этот момент. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.