C++ OpenCV分配导致std::thread::join中出现segfault

C++ OpenCV分配导致std::thread::join中出现segfault,c++,multithreading,opencv,c++11,C++,Multithreading,Opencv,C++11,下面的代码在std::thread类的.join()中抛出一个分段错误。但是,只有在我使用cv::fastMalloc分配数据数组时,才会发生这种情况。如果使用'new'关键字或std::malloc函数,则不会发生错误 我需要理解为什么会发生此错误,因为事实上我需要一个使用此函数的cv::Mat int main() { uchar* data = (uchar*) cv::fastMalloc(640); std::atomic<bool> running(tr

下面的代码在std::thread类的.join()中抛出一个分段错误。但是,只有在我使用cv::fastMalloc分配数据数组时,才会发生这种情况。如果使用'new'关键字或std::malloc函数,则不会发生错误

我需要理解为什么会发生此错误,因为事实上我需要一个使用此函数的cv::Mat

int main() {
    uchar* data = (uchar*) cv::fastMalloc(640);

    std::atomic<bool> running(true);
    std::thread thread([&] () {
        while(running) {
            // I'll perform some process with data here
            // for now, just to illustrate, I put thread to sleep
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    });
    std::this_thread::sleep_for(std::chrono::seconds(1));

    running = false;
    // segfault is thrown here
    thread.join();

    cv::fastFree(data);
    return 0;
}
有人知道会发生什么吗?我真的觉得这太疯狂了


谢谢。

我解决了这个问题,重新安装了opencv。显然,问题在于我编译了opencv并且在本例中使用了不同版本的编译器


为了记录在案,我不久前用一个不支持std::thread(我想是4.7.x)的MinGW版本编译了opencv。

您使用的是哪个版本?您是如何编译/链接的?如果一切正常,看起来就像一个清晰的bug。
mingw32-g++.exe-std=c++11-Wall-fexceptions-lm main.cpp-o main.o
mingw32-g++.exe-o main.o-lopencv core2410.dll.a
mingw4.8.1和OpenCV 2.4.10不知道MinGW,但通常在使用std::thread时,也需要链接
-lpthread
。是的,我已经试过了,没有效果。我还试图设置
-pthread
编译器标志,但它也不起作用。
#0 00429B26 _pthread_cleanup_dest () (??:??)
#1 003E32A0 ?? () (??:??)