Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: ElderOrb от Январь 06, 2006, 11:15



Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: ElderOrb от Январь 06, 2006, 11:15
Если написать следующий кусок кода

Код:

QToolBar* fileToolBar = new QToolBar;
for(;;) {
fileToolBar->addSeparator();
fileToolBar->clear();
QApplication::processEvents();
}


... запустить, и смотреть в это время на task manager - можно увидеть как огромными шматками утекает память.. Может эт я чего не правильно делаю?

p.s. С менюшками такого не наблюдается..


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: Racheengel от Январь 10, 2006, 11:04
а шо за fileToolBar?


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: zlatko от Январь 10, 2006, 13:05
наверно дело в цыкле


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: Racheengel от Январь 10, 2006, 13:08
а кутя какая?


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: ElderOrb от Январь 10, 2006, 13:14
2zlatko: Дело в утечке. Цикл я сделал только чтобы это было очевидно в таск манагере.

2Racheengel: Qt 4.1.0


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: Steven_Orko от Январь 10, 2006, 17:12
В Qt написано:
void QToolBar::clear ()
Removes all actions from the toolbar.
See also removeAction().

Насколько я понимаю, дело не в утечке, а в том, что становится дофига сеператоров. Separator - это не Action


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: SLiDER от Январь 10, 2006, 17:52
Цитата: "Steven_Orko"
Separator - это не Action


Именно так.  8)


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: Anchorite от Январь 10, 2006, 21:43
А вот и не так. Смотрим файл src\gui\widgets\qtoolbar.cpp и видим:

Код:

QAction *QToolBar::addSeparator()
{
    QAction *action = new QAction(this);
    action->setSeparator(true);
    addAction(action);
    return action;
}


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: SLiDER от Январь 10, 2006, 22:59
Цитата: "Anchorite"
А вот и не так. Смотрим файл src\gui\widgets\qtoolbar.cpp и видим:

Код:

QAction *QToolBar::addSeparator()
{
    QAction *action = new QAction(this);
    action->setSeparator(true);
    addAction(action);
    return action;
}


Гммммм. А ведь действительно.  :?  Непонятно.  :roll: Тогда почему следующий код из того же файла, не выполняет своих бязяностей (по свидетельству господина ElderOrb, сам не проверял еще)
Код:
void QToolBar::clear()
{
    QList<QAction *> actions = this->actions();
    for(int i = 0; i < actions.size(); i++)
        removeAction(actions.at(i));
}

Похоже нужно подебажить, но это уже завтра на работе. А сейчас пошол ка я спать, утро вечера мудреннее.


Название: Qt 4.1 - утечка памяти в QToolBar ?
Отправлено: Steven_Orko от Январь 10, 2006, 23:13
Ну, в общем-то он выполняет, только как -то по особенному. Количество элементов в списке становится ноль. Я сначала думал, что это проблемма в QList, но он нормально работает. Скорее всего, где-то неверно предается та область памяти, что занял QList, т.е. она просто копируется, вместо того, чтобы передаваться по ссылки на нее. Удаляются элементы в новом списке, а потом указатель на старую память теряется и место занимает новый.  Я немного подебажил код и вот это получилось. Будет время еще посмотрю. Но это действительно баг Qt, похоже...