前两天调试Qt编写的程序的时候程序突然崩溃并在输出栏提示 : ASSERT: "isDetached()"in file /opt/qt5.12.2-qt-xcb/include/QtCore/qvector.h, line 386
看了一下这个qvector.h,发现程序中断在了如下代码中:
template <typename T>
void QVector<T>::detach()
{
if (!isDetached()) {
#if !defined(QT_NO_UNSHARABLE_CONTAINERS)
if (!d->alloc)
d = Data::unsharableEmpty();
else
#endif
reallocData(d->size, int(d->alloc));
}
Q_ASSERT(isDetached());
}
这说明QVector变量在增加元素的时候,申请内存过程中被打断了。
原因是我有一个类中定义了QVector < QString > 类型的变量vLog;
然后会有多个线程调用这个类中地这个变量:
vLog.push_back("hello");
这时就造成了资源抢占。
解决方法:
在该类中定义类成员变量 QMutex m_qMutex;
然后在使用vLog的地方加锁:
m_qMutex.lock();
vLog.push_back("hello");
m_qMutex.unlock();