Error_016 2024-01-25 12:19 采纳率: 27.3%
浏览 6

c++多线程:关于detach导致vector越界问题

用for循环遍历vector,然后用thread开启线程,打印元素的name:

for (int i = 0; i < command_list.size(); i++) {
    thread([=]() {
        cout << command_list[i]->GetName() << endl;
        }).detach();
}

然后报错了,定睛一看:vector越界!?

img


然后试了一下午,最后发现把detach改为join就不报错,但我又必须用detach,有人知道为什么吗?以及如何解决?

  • 写回答

2条回答 默认 最新

  • flower980323 2024-01-26 09:28
    关注

    建议先搞懂join和detach的区别
    detach不是想用就用的,要确保与他关联的对象在线程结束前都保持不变,一旦关联的对象提前被释放或者被修改,都容易引起问题,你这里就是这种问题,要搞请关联对象的生存周期和变化(比如vector size发生变化)

    评论

报告相同问题?

问题事件

  • 创建了问题 1月25日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵