启动线程会导致指针初始化时出现分段错误



为什么这段代码只有在启动两个"空"线程时才会导致*y = 20上的分段错误?

int main(int argc, char **argv) {
    int x = 10;
    int *y;
    *y = 20;
    std::thread t1([]{});
    std::thread t2([]{});
    t1.join();
    t2.join();
    return 0;
}

取消引用未初始化(或 null(指针是未定义的行为。在这种情况下发生什么都取决于编译器。

您可能打算执行以下操作:

int main(int argc, char **argv) {
    int x = 10;
    int *y = &x;
    *y = 20;
    std::thread t1([]{});
    std::thread t2([]{});
    t1.join();
    t2.join();
    return 0;
}

在这种情况下,无论线程是否存在,它都将工作。

相关内容

  • 没有找到相关文章

最新更新