Название: QLabel в методе текст утечка памяти Отправлено: Noise от Август 25, 2009, 09:18 При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2
void LogServer::setSizeQueue(QString &str) { ui.labelSizeQueue->setText(str); } Как можно решить эту проблему? Название: Re: QLabel в методе текст утечка памяти Отправлено: Rcus от Август 25, 2009, 09:24 эээ... /** с недоверием относится к заявлениям об утечках памяти без трейсов */
Ну найти источник проблемы, сравнить с кодом новых версий библиотеки и принять решение об обновлении... Я обычно так делаю когда встречаю проблемы в библиотеках. Название: Re: QLabel в методе текст утечка памяти Отправлено: spectre71 от Август 25, 2009, 09:37 При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2 Не верю.void LogServer::setSizeQueue(QString &str) { ui.labelSizeQueue->setText(str); } Как можно решить эту проблему? Сделай простейший тест и выложи сюда. Название: Re: QLabel в методе текст утечка памяти Отправлено: Latiol от Август 25, 2009, 14:03 У меня была такая же проблема. Вариант использовать какой-нибудь другой компонент для отображения информации.
Название: Re: QLabel в методе текст утечка памяти Отправлено: zenden от Август 25, 2009, 14:42 Вероятно дело в способе, которым вы меряете память.
Вот здесь (http://lists.trolltech.com/qt-interest/2000-11/thread00767-0.html) есть размышления на этот счёт, датируется аж 2000 годом, так что если бы утечка действительно была, её давно бы исправили. Название: Re: QLabel в методе текст утечка памяти Отправлено: Alex Custov от Август 25, 2009, 15:00 При вызове метода ui.labelSizeQueue->setText(str); происходит утечка памяти. Если строчку закоментить то утечка пропадает! Версия QT 4.2 void LogServer::setSizeQueue(QString &str) { ui.labelSizeQueue->setText(str); } Как можно решить эту проблему? Данные, заносимые через setText(), очевидно копируются во внутренние структуры QLabel (см. исходники), из-за чего потребление памяти естественно увеличится. Говорить об утечке можно только если при многократном вызове setText() объём используемой памяти постоянно увеличивается. Название: Re: QLabel в методе текст утечка памяти Отправлено: Noise от Август 27, 2009, 16:42 Объем памяти увеличивается за 10000 раз вызова на 500кб!
Но когда создаю простейший тест то изменение ни как в объеме занимаемой программы не происходит! А когда в своей программе оставляю такой код void LogServer::setSizeQueue(QString &str) { ui.labelSizeQueue->setText(str); } то объем постоянно увеличивается. А если такой void LogServer::setSizeQueue(QString &str) {} то увеличение объема прекращается! Название: Re: QLabel в методе текст утечка памяти Отправлено: Noise от Август 27, 2009, 17:03 да забыл сказать использование QlineEdit вместо QLabel решило проблему, но мне всё равно хотелось бы решить проблему что бы можно было использовать и QLabel!
Название: Re: QLabel в методе текст утечка памяти Отправлено: Rcus от Август 27, 2009, 17:35 Что-то мне лень искать исходники Qt 4.2 и писать тест. А кому не лень? :)
Название: Re: QLabel в методе текст утечка памяти Отправлено: Igors от Август 27, 2009, 18:55 Объем памяти увеличивается за 10000 раз вызова на 500кб! "Нет этой строки - нет утечки" еще не доказывает что эта строка является ее причиной/виновником setText слишком популярен чтобы такая проблема оставалась незамеченной (даже в версии 1.0). Гораздо более вероятно что приходит испорченный str который не может быть корректно скопирован. Где и как он портится - никто не знает и без тестового проекта - не узнает никогда :)Но когда создаю простейший тест то изменение ни как в объеме занимаемой программы не происходит! А когда в своей программе оставляю такой код void LogServer::setSizeQueue(QString &str) { ui.labelSizeQueue->setText(str); } то объем постоянно увеличивается. А если такой void LogServer::setSizeQueue(QString &str) {} то увеличение объема прекращается! Название: Re: QLabel в методе текст утечка памяти Отправлено: lit-uriy от Август 27, 2009, 19:14 >>А кому не лень?
Дык, пусть автор и попробует собрать свою программу с другой Qt, ради эксперимента. Название: Re: QLabel в методе текст утечка памяти Отправлено: Noise от Август 27, 2009, 19:38 Igors спасибо на вел на мысль в чем ещё может быть проблема :-)! Но всё же почему тогда не возникает таже проблема при использовании QlineEdit?
P.S. Автор делал несколько тестов и объем памяти там не увеличивался! А строка формируется так string.setNum(size, 10); и потом вызывается метод setSizeQueue :-\ Название: Re: QLabel в методе текст утечка памяти Отправлено: Igors от Август 27, 2009, 19:59 Имеет смысл заменить ui.labelSizeQueue на какую-нибудь постороннюю/чистую QLabel, можно static. И посмотреть что будет. Потом (если не поможет) слить все строки в файл (или лог) и посмотреть что то за строки. Потом еще что-то придумается :)
Название: Re: QLabel в методе текст утечка памяти Отправлено: alex12 от Сентябрь 01, 2009, 23:14 Наблюдаю те же симптомы!
Память начинает медленно утекать при использовании QLabel::setText( const QString &str ). Проблема более сложная и неоднозначная, чем просто утечка в setText(). Очевидно, что здесь проявляется какая-то хитрая ситуация, при которой setText() приводит к утечке косвенно. Утечка возникает только при одном из режимов работы моей программы, в котором активно используются QByteArray и прочие контейнеры. В Process Explorer-е видно, что память постоянно прыгает плюс/минус 100 кБ, но при этом медленно растет. Написать простой тест с утечкой у меня пока не получается. Инструментальные средства (Valgrind) пока ситуацию не проясняют. Буду копать дальше. Похоже, что ситуация наблюдается только на MinGW. На Linux-е утечки нет. Название: Re: QLabel в методе текст утечка памяти Отправлено: Latiol от Сентябрь 09, 2009, 03:32 Я у себя заметил, что если я кидаю QLabel в StatusBar, то утечки нет.
Название: Re: QLabel в методе текст утечка памяти Отправлено: shadone от Сентябрь 09, 2009, 14:31 4.2, серьезно? :-\
обновитесь до Qt 4.5.3 |