Qt 多线程 容器 遍历崩溃提示记录子线程中崩溃的原因文章目录Qt 多线程 容器 遍历崩溃一、核心铁律二、代码建议三、最容易忽略的隐形崩溃点经验之谈四、排查此类问题总结一、核心铁律QVector / QList / QString 全都不是线程安全的哪怕只做只读遍历也不能让子线程直接访问主线程的容器只要容器生命周期不归子线程控制就一定会有崩溃风险崩溃原因永远只有两个遍历中容器被销毁野指针遍历中容器内存被重新分配迭代器失效二、代码建议主线程需要传参数给子线程中使用值拷贝不要使用引用指针。必须共用原数据时的开发不使用拷贝内存占用大请使用线程锁QMutex将整个线程锁起三、最容易忽略的隐形崩溃点经验之谈你以为没修改其实 Qt 已经偷偷改了容器赋值容器非 const 传递给函数容器被重新初始化容器所在对象析构 / 关闭窗口四、排查此类问题将要迭代的容器先拷贝然后再进行迭代// 把for(autox:vec)// 改成autotmpvec;for(autox:tmp)不崩了 生命周期 / 迭代器失效问题依然崩 空指针 / 越界 / 其他 bug总结子线程不要直接访问主线程的容器哪怕只读也不行要么传拷贝要么加锁。QVector 只读遍历也会崩溃因为生命周期和内存地址不可控最优方案传拷贝简单、安全、无坑必须共享加锁锁整个遍历过程永远不要让子线程直接访问主线程动态变化的容器