Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.168.172] |
|
Сообщ.
#1
,
|
|
|
Имею такой код. По диспетчеру смотрю что память утекает при каждом вызове функции. Вроде делаю всё правильно а память утекает. Если убрать заполнение листа то утечка прекращается. Что я делаю не так?
void MainWindow::show_report(QList<int> &iType, QStringList &strErr) { // очищаю старые данные если такие есть if(ui->lstReport->count()>0) { qDebug() << "BEFORE ADD"; qDebug() << ui->lstReport->count(); for(int i=ui->lstReport->count()-1; i>0; i--) { QListWidgetItem *lstItem = ui->lstReport->takeItem(i); if(lstItem) { qDebug() << i; ui->lstReport->removeItemWidget(lstItem); delete lstItem; } else { qDebug() << "IM NOT ITEM!"; } } ui->lstReport->clear(); } // добавляю новые данные for(int i=0; i<iType.count(); i++) { QListWidgetItem *lstItem = new QListWidgetItem(iType[i]==1?QIcon(":/images/warning.png"):QIcon(), strErr[i], ui->lstReport); ui->lstReport->addItem(lstItem); } iType.clear(); strErr.clear(); qDebug() << "AFTER ADD"; qDebug() << ui->lstReport->count(); } |
Сообщ.
#2
,
|
|
|
Цитата Парамон @ for(int i=ui->lstReport->count()-1; i>0; i--) { QListWidgetItem *lstItem = ui->lstReport->takeItem(i); В этом цикле никогда не будет вызван ui->lstReport->takeItem(0); Это так и должно быть? Возможно в этом и проблема, что в списке всегда остаётся первый элемент, который, насколько я понял, не будет корректно удалён в ui->lstReport->clear(). |