Решил прогнать программу через Valgrind. И удивился, когда увидел, что он ругается на такие участки кода
void UnlinkedItemsDialog::on_scanMatchObjectsButton_clicked()
{
SelectStorageDialog selectDlg(this);
QList<CRailObjectStorage*> storages = fstorageManager->storageMap().values();
qSort(storages.begin(),storages.end(),CRailObjectStorage::lessThanId);
selectDlg.setStorages(storages);
if(selectDlg.exec()==QDialog::Accepted) //<<< ругается на эту строчку ( и подобные вызовы QDialog::exec() созданных в стеке диалогов)
{
fmodel.setStoragesToScan(selectDlg.selectedStorages());
fmodel.checkForProbableLinkage();
}
}
576 bytes in 16 blocks are definitely lost in loss record 8,943 of 9,454
в UnlinkedItemsDialog::on_scanMatchObjectsButton_clicked() в extensions/logic/editor/dialogs/unlinkeditemsdialog.cpp:259
1: malloc в /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
2: /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
3: /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
4: /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
5: /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
6: xcb_flush в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
7: 0xc917dd9
8: 0xc91811f
9: QBackingStore::flush(QRegion const&, QWindow*, QPoint const&) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Gui.so.5.2.0
10: /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
11: /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
12: QWidgetPrivate::syncBackingStore() в /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
13: QWidget::event(QEvent*) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
14: QApplicationPrivate::notify_helper(QObject*, QEvent*) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
15: QApplication::notify(QObject*, QEvent*) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
16: QCoreApplication::notifyInternal(QObject*, QEvent*) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5.2.0
17: QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5.2.0
18: /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5.2.0
19: g_main_context_dispatch в /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1
20: /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1
21: g_main_context_iteration в /lib/x86_64-linux-gnu/libglib-2.0.so.0.3800.1
22: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5.2.0
23: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) в /opt/Qt/5.2.0/gcc_64/lib/libQt5Core.so.5.2.0
24: QDialog::exec() в /opt/Qt/5.2.0/gcc_64/lib/libQt5Widgets.so.5.2.0
25: UnlinkedItemsDialog::on_scanMatchObjectsButton_clicked() в <a href="file:///..../editor/dialogs/unlinkeditemsdialog.cpp:259" >extensions/logic/editor/dialogs/unlinkeditemsdialog.cpp:259</a>
Хм, казалось бы диалог должен уничтожиться после выхода из функции слота. Или я чего то не понимаю. И в программе находит несколько таких мест, хотя суть одна - при вызове метода exec() диалога, который создан в стеке - говорит что память течет. Разъясните, может я что то упустил из вида. Хотя скажу, что очень много течи находит во внутренних либах и либах Qt.