ASSERT: "isDetached()"报错——多线程抢占QVector类型变量引起的问题

前两天调试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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenHandBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值