Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281

Вопрос про утечку памяти в Qt

10.11.2010, 08:56. Показов 3623. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вопрос. В этом коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <QApplication>
#include <QFont>
#include <QPushButton>
#include <QWidget>
 
class MyWindow:public QWidget
{
public:
    MyWindow(QWidget *parent=0);
};
 
MyWindow::MyWindow(QWidget *parent)
    :QWidget(parent)
{
    setFixedSize(200,120);
    
    QPushButton *quit=new QPushButton(tr("Quit"),this);
    quit->setGeometry(62,40,75,30);
    quit->setFont(QFont("Times",18,QFont::Bold));
    
    connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));
}
 
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MyWindow widget;
    widget.show();
    
    return app.exec();
}
Всё ли правильно? Ведь с строке
C++
1
QPushButton *quit=new QPushButton(tr("Quit"),this);
создаётся новый объект типа QPushButton, но удаления с помощью delete я нигде не вижу. Нет ли тут утечки памяти, или такие объекты сами удаляются?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2010, 08:56
Ответы с готовыми решениями:

Проверка на утечку памяти
Есть оконное приложение где куча контейнеров и т.д. Как можно проверить, есть ли утечки памяти? (Qt5.7)

Qt Creator проверка на утечку памяти
Всем привет! Подскажите как в Qt Creator проверить код на утечку памяти. Какие утилиты использовать, а именно графические. Работаю под...

Про деструктор и утечку памяти
Доброе время суток. Вот что дано: #include &lt;string&gt; #include &lt;vector&gt; class Symbols { protected: void add(std::string...

15
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
10.11.2010, 09:16
Цитата Сообщение от МаксимМВ Посмотреть сообщение
создаётся новый объект типа QPushButton, но удаления с помощью delete я нигде не вижу. Нет ли тут утечки памяти, или такие объекты сами удаляются?
если класс наследован от QObject в конструктор передан не нулевой QWiget *parent то объект уничтожит родитель при своем разрушении.

QPushButton *quit=new QPushButton(tr("Quit"),this); здесь this это родитель для объекта
1
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
10.11.2010, 10:11  [ТС]
Ясно, спасибо
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
10.11.2010, 10:30
а можно туповатый вопрос? :-)
а если к примеру код будет такой:
C++
1
2
3
QPushButton *quit;
for(int i=0;i<10;i++)
   quit=new QPushButton(tr("Quit"),this);
то тут уже будет утечка, правильно ведь?
1
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
10.11.2010, 10:41
не будет, все кнопки удаляться при пазрушении this - он свои дочерние объекты подчистит.
2
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
10.11.2010, 11:12
Во умное создание а я тут беспокоюсь, подчищаю сам за собой. эх... если так дело пойдёт, скоро как .net будет
спс за инфу.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
10.11.2010, 11:15
Цитата Сообщение от l_a_m Посмотреть сообщение
Во умное создание а я тут беспокоюсь, подчищаю сам за собой. эх... если так дело пойдёт, скоро как .net будет
спс за инфу.
как дотнет не будет, там при выходе из области видимости объект помечается сборщиком мусора, тут при большом времени жизни "родительского" объекта (пример главная форма) могут быть утечки памяти, до тех пор пока его не разрушим.
ЗЫ: подобное уже давно было реализовано в VCL там почти для каждого объекта есть TObject *Owner - он тоже за собой все подчищает.
1
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 3
19.02.2013, 21:43
Доброго времени суток! Только начал разбираться в Qt и сразу возникла проблема с утечкой памяти в элементе управления PushButton. Проявляется при нажатиях и проведении курсора мыши через кнопку т.е. при генерации событий mouseHower, mouseLeave. Если кто с таким сталкивался и знает в чем проблема, растолкуйте плиз новичку с чем это связано и как решить или обойти эту проблему.

Добавлено через 1 минуту
Использую Qt 5.0
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
19.02.2013, 21:54
а код мы телепатически должны увидеть? Мне обычно снится он, но сегодня я что-то не в ударе....
2
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 3
20.02.2013, 08:49
А кода нет . В Форму просто была вставлена кнопка PushButton (в дизайнере), ну а дальше манипуляции мышкой и наблюдение в диспетчере задач, примерно за минуту утекло 100мб, хотя это зависит от частоты манипуляций. С другими контролами таких проблем не наблюдалось.
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
20.02.2013, 09:31
а вы запускаете этот проект как отдельное приложение (не через IDE) и откомпиленое в релиз ?
0
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 3
20.02.2013, 10:46
Цитата Сообщение от Чистый Посмотреть сообщение
а вы запускаете этот проект как отдельное приложение (не через IDE) и откомпиленое в релиз ?
Через IDE. Запускать без IDE пока не умею ибо еще не научился собирать так, чтобы на выходе с экземшником присутствовали все необходимые библиотеки. Собирал в релиз в том числе (с запуском из IDE), все равно утечка есть. А у вас такой проблемы не возникает?

Добавлено через 37 минут
Решил проблему установкой версии Qt 5.0.1, стояла 5.0.0, пофиксили баг слава богу .
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
20.02.2013, 13:41
ну так вам и надо указывать что Qt5, там есть утечки лучше ждите 5.1 так надежнее
0
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 36
09.04.2014, 12:11
апну что ли.
здравствуйте. возникла проблема с утечкой памяти при работе с выдачей кадра (примерно 7мб) по сети в отдельном потоке. код, к сожалению, предоставить не имею права, так что попробую описать симптомы. кадр записывается в виде QByteArray, в поток передается в виде параметра при создании объекта поточного класса.
C++ (Qt)
1
2
3
  MyThread7 *thread7 = new MyThread7(IP,kadr,I,fpInfo);
  connect(thread7, SIGNAL(finished()),thread7, SLOT(deleteLater()));
      thread7->start();
сокет в потоке инициализируется так:
C++ (Qt)
1
socket1 = new QTcpSocket(this);
конструктор класса:
C++ (Qt)
1
2
MyThread7 :: MyThread7 (QString IP, QByteArray kadr1,int i, FrameParser *fpInfo, QObject *parent):
        QThread(parent), IPaddr(IP), kadr(kadr1), I(i)
в ходе потока инициализируется 1 структура, которую я удаляю с помощью оператора delete.
C++ (Qt)
1
2
3
ZAGOLOVOK *zag = new ZAGOLOVOK;
________
delete zag;
и массив чаров, который также удаляется.
больше никаких объектов в потоке не образуется. сокет удаляется в деструкторе класса.

поток образуется каждые 4 секунды и после передачи кадра закрывается. соответственно при каждой передачи происходит утечка порядка 100 кб. тк процесс должен происходить длительное время, то через некоторое количество кадров программа падает. в чем может заключаться проблема в данном случае? QT 4.7.

p.s. я сам грешу на QByteArray и создание структуры. как работает удаление структуры? сколько я понимаю оператор delete вызывает деструктор соответствующего класса, который и удаляет данный объект, а как происходит со структурами?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
09.04.2014, 13:42
UnforgivenII, использовать различные memcheck'еры религия не позволяет?
0
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 36
09.04.2014, 14:08
мемчекеры? какие например?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2014, 14:08
Помогаю со студенческими работами здесь

Про утечку памяти, new, delete и функции, возвращающие указатель на структуру
О как тему назвал! Очередной вопрос от новичка. Допустим, есть код. #include &lt;cstdio&gt; #include &lt;ctime&gt; int...

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Найти утечку памяти
Помогите найти утечку памяти #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; struct Rebro { int val; struct Rebro *next; }; ...

Найти утечку памяти
Приветствую всех! Много раз слышал, что с помощью CodeGuard можно проверить есть ли в приложении утечка памяти. Подскажите, как это сделать?

Изолировать утечку памяти
Есть давний проект. В нем есть утечка памяти. Разобраться с самой утечкой - долго, там, судя по отзывам в сети, проблемы у компилятора. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru