Название: QByteArray утечка памяти Отправлено: ecspertiza от Август 23, 2011, 09:22 Есть такой вот незамысловатый пример
Код: #include <QtCore/QCoreApplication> насколько могу понять, здесь память утекает в QByteArray , но не могу понять почему. Ведь вроде как передается он по указателю ,а потом удаляется. Или я что то упускаю ? Название: Re: QByteArray утечка памяти Отправлено: Пантер от Август 23, 2011, 09:25 delete listByte.takeFirst ();
Название: Re: QByteArray утечка памяти Отправлено: ecspertiza от Август 23, 2011, 09:46 да, спасибо, так гораздо лучше :)
Название: Re: QByteArray утечка памяти Отправлено: SimpleSunny от Август 23, 2011, 10:46 1.Также возможна ошибка с гонкой за listByte, если функция "просто вызывается".
Код
В данном случае надо использовать или слот, соединив его с соответствующим сигналом, или invokeMethod(Qt::QueuedConnection), или Mutex. 2. Может вместо if (!listByte.isEmpty()) подразумевалось while (!listByte.isEmpty()). Название: Re: QByteArray утечка памяти Отправлено: ecspertiza от Август 23, 2011, 11:07 1. У меня в оригинальной софтине, слот, здесь просто пример на скорую руку, так сказать :)
2. Да while, торопился :) Что больше всего мне было непонятно в оригинальной софтине я для удаления из списка объекта использовал removeAt(0) ,ну и перед этим delete конечно, но память почему то утекала, не понимаю почему, но с takeFirst() работает хорошо. Название: Re: QByteArray утечка памяти Отправлено: Igors от Август 23, 2011, 12:35 Синхронизацией пока и не пахло (наверное отложил на потом)
Название: Re: QByteArray утечка памяти Отправлено: SimpleSunny от Август 23, 2011, 17:45 Кстати, так как, сам обьект Thread живет не в своем собственном потоке, а там где он создан, то и слоты будут выполняться в контексте потока в котором он создан. Чтобы слоты выполнялись в потоке Thread, надо его вручную туда переместить.
Название: Re: QByteArray утечка памяти Отправлено: ecspertiza от Август 23, 2011, 18:50 стало быть в ф-ции run() выполнить moveThread(this) ? я правильно понимаю ? про слоты не знал, спасибо :)
Название: Re: QByteArray утечка памяти Отправлено: SimpleSunny от Август 23, 2011, 19:27 В конструкторе
Thread(QObject *parent = 0):QThread(parent){ moveToThread(this); } Но насколько помню, если задан parent, то конструкция не отработает как ожидается. На форуме было обсуждение использовать\не_использовать moveToThread(this); UPD. http://www.prog.org.ru/topic_17090_0.html |