Russian Qt Forum
Ноябрь 27, 2024, 16:53
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QLabel в методе текст утечка памяти
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QLabel в методе текст утечка памяти (Прочитано 9573 раз)
Noise
Гость
QLabel в методе текст утечка памяти
«
:
Август 25, 2009, 09:18 »
При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2
void LogServer::setSizeQueue(QString &str)
{
ui.labelSizeQueue->setText(str);
}
Как можно решить эту проблему?
Записан
Rcus
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #1 :
Август 25, 2009, 09:24 »
эээ... /** с недоверием относится к заявлениям об утечках памяти без трейсов */
Ну найти источник проблемы, сравнить с кодом новых версий библиотеки и принять решение об обновлении... Я обычно так делаю когда встречаю проблемы в библиотеках.
Записан
spectre71
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #2 :
Август 25, 2009, 09:37 »
Цитата: Noise от Август 25, 2009, 09:18
При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2
void LogServer::setSizeQueue(QString &str)
{
ui.labelSizeQueue->setText(str);
}
Как можно решить эту проблему?
Не верю.
Сделай простейший тест и выложи сюда.
Записан
Latiol
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #3 :
Август 25, 2009, 14:03 »
У меня была такая же проблема. Вариант использовать какой-нибудь другой компонент для отображения информации.
Записан
zenden
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #4 :
Август 25, 2009, 14:42 »
Вероятно дело в способе, которым вы меряете память.
Вот
здесь
есть размышления на этот счёт, датируется аж 2000 годом, так что если бы утечка действительно была, её давно бы исправили.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: QLabel в методе текст утечка памяти
«
Ответ #5 :
Август 25, 2009, 15:00 »
Цитата: Noise от Август 25, 2009, 09:18
При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2
void LogServer::setSizeQueue(QString &str)
{
ui.labelSizeQueue->setText(str);
}
Как можно решить эту проблему?
Данные, заносимые через setText(), очевидно копируются во внутренние структуры QLabel (см. исходники), из-за чего потребление памяти естественно увеличится. Говорить об
утечке
можно только если при многократном вызове setText() объём используемой памяти
постоянно
увеличивается.
Записан
Noise
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #6 :
Август 27, 2009, 16:42 »
Объем памяти увеличивается за 10000 раз вызова на 500кб!
Но когда создаю простейший тест то изменение ни как в объеме занимаемой программы не происходит!
А когда в своей программе оставляю такой код
void LogServer::setSizeQueue(QString &str)
{
ui.labelSizeQueue->setText(str);
}
то объем постоянно увеличивается. А если такой
void LogServer::setSizeQueue(QString &str)
{}
то увеличение объема прекращается!
Записан
Noise
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #7 :
Август 27, 2009, 17:03 »
да забыл сказать использование QlineEdit вместо QLabel решило проблему, но мне всё равно хотелось бы решить проблему что бы можно было использовать и QLabel!
Записан
Rcus
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #8 :
Август 27, 2009, 17:35 »
Что-то мне лень искать исходники Qt 4.2 и писать тест. А кому не лень?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QLabel в методе текст утечка памяти
«
Ответ #9 :
Август 27, 2009, 18:55 »
Цитата: Noise от Август 27, 2009, 16:42
Объем памяти увеличивается за 10000 раз вызова на 500кб!
Но когда создаю простейший тест то изменение ни как в объеме занимаемой программы не происходит!
А когда в своей программе оставляю такой код
void LogServer::setSizeQueue(QString &str)
{
ui.labelSizeQueue->setText(str);
}
то объем постоянно увеличивается. А если такой
void LogServer::setSizeQueue(QString &str)
{}
то увеличение объема прекращается!
"Нет этой строки - нет утечки" еще не доказывает что эта строка является ее причиной/виновником setText слишком популярен чтобы такая проблема оставалась незамеченной (даже в версии 1.0). Гораздо более вероятно что приходит испорченный str который не может быть корректно скопирован. Где и как он портится - никто не знает и без тестового проекта - не узнает никогда
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: QLabel в методе текст утечка памяти
«
Ответ #10 :
Август 27, 2009, 19:14 »
>>А кому не лень?
Дык, пусть автор и попробует собрать свою программу с другой Qt, ради эксперимента.
Записан
Юра.
Noise
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #11 :
Август 27, 2009, 19:38 »
Igors спасибо на вел на мысль в чем ещё может быть проблема :-)! Но всё же почему тогда не возникает таже проблема при использовании QlineEdit?
P.S. Автор делал несколько тестов и объем памяти там не увеличивался!
А строка формируется так string.setNum(size, 10); и потом вызывается метод setSizeQueue
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QLabel в методе текст утечка памяти
«
Ответ #12 :
Август 27, 2009, 19:59 »
Имеет смысл заменить ui.labelSizeQueue на какую-нибудь постороннюю/чистую QLabel, можно static. И посмотреть что будет. Потом (если не поможет) слить все строки в файл (или лог) и посмотреть что то за строки. Потом еще что-то придумается
Записан
alex12
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #13 :
Сентябрь 01, 2009, 23:14 »
Наблюдаю те же симптомы!
Память начинает медленно утекать при использовании
QLabel::setText( const QString &str )
.
Проблема более сложная и неоднозначная, чем просто утечка в setText(). Очевидно, что здесь проявляется какая-то хитрая ситуация, при которой setText() приводит к утечке косвенно. Утечка возникает только при одном из режимов работы моей программы, в котором активно используются QByteArray и прочие контейнеры. В Process Explorer-е видно, что память постоянно прыгает плюс/минус 100 кБ, но при этом медленно растет.
Написать простой тест с утечкой у меня пока не получается. Инструментальные средства (Valgrind) пока ситуацию не проясняют. Буду копать дальше.
Похоже, что ситуация наблюдается только на MinGW. На Linux-е утечки нет.
«
Последнее редактирование: Сентябрь 02, 2009, 00:50 от alex12
»
Записан
Latiol
Гость
Re: QLabel в методе текст утечка памяти
«
Ответ #14 :
Сентябрь 09, 2009, 03:32 »
Я у себя заметил, что если я кидаю QLabel в StatusBar, то утечки нет.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...