簡體   English   中英

C ++程序結束時的thread_local向量分段錯誤

[英]thread_local vector segmentation fault at end of program in C++

我正在嘗試制作一個多線程程序但是線程局部向量有一個奇怪的問題。 這是(精簡到只有錯誤)代碼:

#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() ()

不知何故,向量的析構函數中存在錯誤。 使用斷點查看它會顯示該錯誤在程序退出時發生。

使向量不是本地的線程使程序工作,但當然我需要它是線程本地的。 如果我根本不與矢量交互,程序運行正常。

我想我將不得不使用一些替代方案,但有人知道一種方法來使這項工作? 謝謝!

編輯:我很愚蠢,忘了更多關於我的系統的信息。 我正在使用Windows Vista 64位。 運行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給出了以下內容(與您的版本和線程模型相同,不同的arch):

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM