Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QMap迭代器崩溃_C++_Qt_Qmap - Fatal编程技术网

C++ QMap迭代器崩溃

C++ QMap迭代器崩溃,c++,qt,qmap,C++,Qt,Qmap,所以我一直在做一个小项目,在这个项目中,我想从JPEG中读取EXIF数据,将其存储在地图中,然后在QListView中显示它 为了得到exif数据,我有这个 void CImageMeta::cacheEXIF() { if(!isValid()) return; if(m_path.isEmpty()) return; QString rootPath = CConfig::getInstance()->getMainConfig()->value("ro

所以我一直在做一个小项目,在这个项目中,我想从JPEG中读取EXIF数据,将其存储在地图中,然后在QListView中显示它

为了得到exif数据,我有这个

void CImageMeta::cacheEXIF()
{
    if(!isValid()) return;
    if(m_path.isEmpty()) return;

    QString rootPath = CConfig::getInstance()->getMainConfig()->value("root", "./").toString();
    QString fpath = rootPath+m_path;
    //TODO: get EXIF data with libEXIF
    char *buf = 0;
    ExifData *data = exif_data_new_from_file(fpath.toStdString().c_str());

    for(unsigned i = 0; i < data->ifd[EXIF_IFD_EXIF]->count; i++)
    {
        buf = (char*)calloc(256, 1);
        exif_entry_get_value(data->ifd[EXIF_IFD_EXIF]->entries[i], buf, 255);
        //nbuf = ;
        m_cachedEXIF.insert(QString::fromUtf8(exif_tag_get_name(data->ifd[EXIF_IFD_EXIF]->entries[i]->tag)), QString::fromUtf8(buf));
        free(buf);
    }

    for(QMap<QString, QString>::iterator it = m_cachedEXIF.begin(); it != m_cachedEXIF.end(); it++)
    {
        qDebug() << it.key() << " " << it.value();
    }
    exif_data_free(data);
}
if(img->cachedEXIF().size() <= 0) return;
ui->tblEXIFData->clearContents();
ui->tblEXIFData->setColumnCount(img->cachedEXIF().size());
for(QMap<QString,QString>::iterator it = img->cachedEXIF().begin();it != img->cachedEXIF().end(); it++)
{
    ui->tblEXIFData->setItem(i,0,new QTableWidgetItem(it.key()));
    ui->tblEXIFData->setItem(i,1,new QTableWidgetItem(it.value()));
    i++;
}
void cimageta::cachexif()
{
如果(!isValid())返回;
if(m_path.isEmpty())返回;
QString rootPath=CConfig::getInstance()->getMainConfig()->值(“根“,”/”).toString();
QString fpath=rootPath+m_路径;
//TODO:使用libEXIF获取EXIF数据
char*buf=0;
ExifData*data=exif_data_new_from_文件(fpath.toStdString().c_str());
对于(无符号i=0;iifd[EXIF\u ifd\u EXIF]->计数;i++)
{
buf=(char*)calloc(256,1);
exif\u entry\u get\u value(数据->ifd[exif\u ifd\u exif]->entries[i],buf,255);
//nbuf=;
m_cachedEXIF.insert(QString::fromUtf8(exif_tag\u get_name(data->ifd[exif_ifd\u exif]->entries[i]->tag)),QString::fromUtf8(buf));
免费(buf);
}
for(QMap::iterator it=m_cachedEXIF.begin();it!=m_cachedEXIF.end();it++)
{
qDebug()tblEXIFData->setColumnCount(img->cachedEXIF().size());
对于(QMap::iterator it=img->cachedEXIF().begin();it!=img->cachedEXIF().end();it++)
{
ui->tblEXIFData->setItem(i,0,新的QTableWidgetItem(it.key());
ui->tblEXIFData->setItem(i,1,新的QTableWidgetItem(it.value());
i++;
}
在这里,第一次迭代可以工作,但第二次迭代已经导致调试器显示it值不可访问,第三次迭代最终在QMap::iterator::next()/it++上崩溃

所以我不知道这里发生了什么。 img指针正确地指向对象,映射似乎是完整的(就调试器显示的内容而言)

编辑:

按要求进行回溯:

Thread 3 (Thread 0x7fffde59f700 (LWP 12319)):
#0  0x00007ffff3b7e8bf in pthread_cond_wait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
No symbol table info available.
#1  0x00007ffff3f10a14 in ?? () from /usr/lib/libQt5Script.so.5
No symbol table info available.
#2  0x00007ffff3f10a59 in ?? () from /usr/lib/libQt5Script.so.5
No symbol table info available.
#3  0x00007ffff3b79314 in start_thread () from /usr/lib/libpthread.so.0
No symbol table info available.
#4  0x00007ffff4f773ed in clone () from /usr/lib/libc.so.6
No symbol table info available.

Thread 2 (Thread 0x7fffe91b6700 (LWP 12318)):
#0  0x00007ffff4f7839d in recvmsg () from /usr/lib/libc.so.6
No symbol table info available.
#1  0x00007ffff0e2e917 in ?? () from /usr/lib/libxcb.so.1
No symbol table info available.
#2  0x00007ffff0e2cc61 in ?? () from /usr/lib/libxcb.so.1
No symbol table info available.
#3  0x00007ffff0e2e56f in xcb_wait_for_event () from /usr/lib/libxcb.so.1
No symbol table info available.
#4  0x00007fffeb3a8b49 in ?? () from /usr/lib/qt/plugins/platforms/libqxcb.so
No symbol table info available.
#5  0x00007ffff57f43be in ?? () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#6  0x00007ffff3b79314 in start_thread () from /usr/lib/libpthread.so.0
No symbol table info available.
#7  0x00007ffff4f773ed in clone () from /usr/lib/libc.so.6
No symbol table info available.

Thread 1 (Thread 0x7ffff7fb8780 (LWP 12314)):
#0  0x00007ffff5a220b5 in QVariant::QVariant(QString const&) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#1  0x00007ffff6b8c8ac in QTableWidgetItem::QTableWidgetItem(QString const&, int) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#2  0x000000000040c60b in MainWindow::displayImageInfo (this=0x7fffffffe5a0, img=0xbc7470) at ../fotomanager/mainwindow.cpp:242
        it = {i = 0xc59690}
        i = 1
        dispImg = 0x4
        dispPM = <incomplete type>
#3  0x000000000040c431 in MainWindow::on_lstImages_itemClicked (this=0x7fffffffe5a0, item=0xbe5c30) at ../fotomanager/mainwindow.cpp:226
        imgID = 2
        img = 0xbc7470
#4  0x0000000000428a34 in MainWindow::qt_static_metacall (_o=0x7fffffffe5a0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffd4b0) at moc_mainwindow.cpp:114
        _t = 0x7fffffffe5a0
#5  0x0000000000428bec in MainWindow::qt_metacall (this=0x7fffffffe5a0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffd4b0) at moc_mainwindow.cpp:152
No locals.
#6  0x00007ffff5a0f4d4 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#7  0x00007ffff6b802b2 in QListWidget::itemClicked(QListWidgetItem*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#8  0x00007ffff5a0f40d in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#9  0x00007ffff6b1c865 in QAbstractItemView::clicked(QModelIndex const&) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#10 0x00007ffff6b255e3 in QAbstractItemView::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#11 0x00007ffff6b49a7e in QListView::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#12 0x00007ffff6917fa8 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#13 0x00007ffff6a1a5fe in QFrame::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#14 0x00007ffff6b2ba0b in QAbstractItemView::viewportEvent(QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#15 0x00007ffff59e04fa in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#16 0x00007ffff68d9f2c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#17 0x00007ffff68dfbe6 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#18 0x00007ffff59e070b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#19 0x00007ffff68de0d3 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#20 0x00007ffff693685d in ?? () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#21 0x00007ffff6938c73 in ?? () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#22 0x00007ffff68d9f4c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#23 0x00007ffff68df36e in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
No symbol table info available.
#24 0x00007ffff59e070b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#25 0x00007ffff5f09636 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/libQt5Gui.so.5
No symbol table info available.
#26 0x00007ffff5f0ae75 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/libQt5Gui.so.5
No symbol table info available.
#27 0x00007ffff5ef058f in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5
No symbol table info available.
#28 0x00007fffeb3ce800 in ?? () from /usr/lib/qt/plugins/platforms/libqxcb.so
No symbol table info available.
#29 0x00007ffff365ca1d in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#30 0x00007ffff365cd08 in ?? () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#31 0x00007ffff365cdbc in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
No symbol table info available.
#32 0x00007ffff5a38137 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#33 0x00007ffff59de132 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#34 0x00007ffff59e5aec in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
No symbol table info available.
#35 0x000000000040ab60 in main (argc=1, argv=0x7fffffffe708) at ../fotomanager/main.cpp:10
        a = <incomplete type>
        w = {<QMainWindow> = {<No data fields>}, static staticMetaObject = {d = {superdata = 0x7ffff6fdc480 <QMainWindow::staticMetaObject>, stringdata = 0x71cbc0 <qt_meta_stringdata_MainWindow>, data = 0x71cec0 <qt_meta_data_MainWindow>, static_metacall = 0x4288f8 <MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, ui = 0xaf4990, folderScan = 0xb70e70, ratingWidget = 0xb87bc0, tagWidget = 0xbe1c90, currentAlbum = 0x40aa10 <_start>, currentPicture = 0xbe5c30}
线程3(线程0x7fffde59f700(LWP 12319)):
#0 0x00007FF3B7E8BF在/usr/lib/libpthread.so.0的pthread_cond_wait@@GLIBC_2.3.2()中
没有可用的符号表信息。
#来自/usr/lib/libQt5Script.so.5的1 0x00007FF3F10A14英寸
没有可用的符号表信息。
#来自/usr/lib/libQt5Script.so.5的2 0x00007FF3F10A59英寸
没有可用的符号表信息。
#3 0x00007FF3B79314位于/usr/lib/libpthread.so.0的start_线程()中
没有可用的符号表信息。
#从/usr/lib/libc.so.6在克隆()中插入4 0x00007ffff4f773ed
没有可用的符号表信息。
线程2(线程0x7fffe91b6700(LWP 12318)):
#在/usr/lib/libc.so.6的recvmsg()中0 0x00007ff4f7839d
没有可用的符号表信息。
#来自/usr/lib/libxcb.so.1的0x00007FF0E2E917英寸
没有可用的符号表信息。
#来自/usr/lib/libxcb.so.1的2 0x00007FF0E2CC61英寸
没有可用的符号表信息。
#来自/usr/lib/libxcb.so.1的xcb_wait_for_事件()中的3 0x00007ffff0e2e56f
没有可用的符号表信息。
#来自/usr/lib/qt/plugins/platforms/libqxcb.so的4 0x00007fffeb3a8b49英寸
没有可用的符号表信息。
#5 0x00007FF57F43BE在/usr/lib/libQt5Core.so.5的()中
没有可用的符号表信息。
#6 0x00007FF3B79314位于/usr/lib/libpthread.so.0的start_线程()中
没有可用的符号表信息。
#从/usr/lib/libc.so.6在克隆()中插入7 0x00007ffff4f773ed
没有可用的符号表信息。
线程1(线程0x7ffff7fb8780(LWP 12314)):
#来自/usr/lib/libQt5Core.so.5的QVariant::QVariant(QString const&)中的0 0x00007ff5a220b5
没有可用的符号表信息。
#1 0x00007FF6B8C8AC,位于/usr/lib/libQt5Widgets.so中的QTableWidgetItem::QTableWidgetItem(QString const&,int)()中。5
没有可用的符号表信息。
#主窗口中的2 0x000000000040c60b::在../fotomanager/MainWindow.cpp:242处显示图像信息(该信息=0x7fffffe5a0,img=0xbc7470)
它={i=0xc59690}
i=1
dispImg=0x4
dispPM=
#3 0x000000000040c431在主窗口::在lstImages_项上单击(this=0x7fffffffe5a0,item=0xbe5c30)在../fotomanager/MainWindow.cpp:226
imgID=2
img=0xbc7470
#4 0x0000000000428a34在主窗口::qt_static_metacall(_o=0x7fffffffe5a0,_c=QMetaObject::invokeMetethod,_id=4,_a=0x7fffffffd4b0)在moc_主窗口。cpp:114
_t=0x7FFFFFE5A0
#主窗口中的5 0x0000000000428bec::qt_metacall(this=0x7fffffffe5a0,_c=QMetaObject::invokeMetethod,_id=4,_a=0x7fffffffd4b0)位于moc_主窗口。cpp:152
没有本地人。
#从/usr/lib/libQt5Core.so.5激活(QObject*,int,int,void**)()中的6 0x00007ffff5a0f4d4
没有可用的符号表信息。
#7/usr/lib/libQt5Widgets.so.5中QListWidget::itemClicked(QListWidgetItem*)()中的0x00007FF6B802B2
没有可用的符号表信息。
#8/usr/lib/libQt5Core.so.5中QMetaObject::activate(QObject*,int,int,void**)中的0x00007ffff5a0f40d
没有可用的符号表信息。
#9 qabstractemview中的0x00007ffff6b1c865::从/usr/lib/libQt5Widgets.so.5单击(QModelIndex const&)()
没有可用的符号表信息。
#10 0x00007FF6B255E3,位于/usr/lib/libQt5Widgets.so.5的QAbstractItemView::mouseReleaseEvent(QMouseEvent*)()中
没有可用的符号表信息。
#11/usr/lib/libQt5Widgets.so.5中QListView::mouseReleaseEvent(QMouseEvent*)()中的0x00007FF6B49A7E
没有可用的符号表信息。
#来自/usr/lib/libQt5Widgets.so.5的QWidget::event(QEvent*)()中的12 0x00007ffff6917fa8
没有可用的符号表信息。
#来自/usr/lib/libQt5Widgets.so.5的QFrame::event(QEvent*)()中的13 0x00007FF6A1A5FE
没有可用的符号表信息。
#来自/usr/lib/libQt5Widgets.so.5的QAbstractItemView::viewportEvent(QEvent*)()中的14 0x00007FF6B2BA0B
没有可用的符号表信息。
#来自/usr/lib/libQt5Core.so.5的QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*,QEvent*)()中的15 0x00007ffff59e04fa
没有可用的符号表信息。
#QApplicationPrivate::notify_helper(QObject*,QEvent*)()中的16 0x00007ffff68d9f2c来自/usr/lib/libQt5Widgets.so.5
没有可用的符号表信息。
#17/usr/lib/libQt5Widgets.so.5中QApplication::notify(QObject*,QEvent*)()中的0x00007ffff68dfbe6
没有可用的符号表信息。
#来自/usr/lib/libQt5Core.so.5的QCoreApplication::notifyInternal(QObject*,QEvent*)()中的18 0x00007ffff59e070b
无符号表