gpt4 book ai didi

c++ - C++ 程序末尾的 thread_local vector 段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:29 26 4
gpt4 key购买 nike

我正在尝试制作一个多线程程序,但在线程局部 vector 方面遇到了一个奇怪的问题。这是(精简到只有错误)代码:

#include <vector>
#include <iostream>
thread_local std::vector<int> vec;
int main(){
vec.push_back(3);
std::cout << vec[0];
// Make you push enter to show the error is at the end
std::cin.ignore();
}

程序编译正常,运行基本正常,但在我按回车键后,我收到“程序已停止工作”消息。我在 gdb 中运行它并得到了这个错误:

Program received signal SIGSEGV, Segmentation fault.
0x004030b0 in std::vector<int, std::allocator<int> >::~vector() ()

不知何故, vector 的析构函数中存在错误。使用断点检查它表明此错误在程序退出时发生。

使 vector 不是线程本地的可以使程序运行,但我当然需要它是线程本地的。如果我根本不与 vector 交互,程序运行良好。

我在想我必须使用一些替代方法,但是有人知道一种方法可以使它起作用吗?谢谢!

编辑:我很愚蠢,忘记了有关我系统的更多信息。我使用的是 64 位 Windows Vista。运行 g++ -v 给我:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=C:/MinGW/bin/../libexec/gcc/i686-w64-mingw32/5.2.0/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with [edited out because it's too big and probably not relevant]
Thread model: posix
gcc version 5.2.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)

线程模型实际上可能与它有很大关系。

最佳答案

它取决于设置;我已经使用 64 位 MinGW 在 Windows 7(64 位)上成功编译并运行了您的示例程序。也许这与您在 64 位平台上使用 32 位 MinGW 安装有关?我的 g++ -v 给出了以下内容(与你的版本和线程模型相同,不同的架构):

Using built-in specs.
COLLECT_GCC=g++
Target: x86_64-w64-mingw32
Thread model: posix
gcc version 5.2.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

关于c++ - C++ 程序末尾的 thread_local vector 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com