OpenCV分配导致std :: thread :: join中的segfault

时间:2016-01-10 03:15:36

标签: c++ multithreading opencv c++11

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

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

int DoSum(const std::string &file)
{
     /*  do calculations */
     if (error_has_occurred)
         throw some_appropriate_exception();
     else
         return calculated_sum;
}

GDB callstack如下所示

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;
}

有谁知道可能会发生什么?我真的觉得太疯狂了:S。

感谢。

1 个答案:

答案 0 :(得分:0)

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

为了记录,我前段时间用不支持std :: thread的MinGW版本编译了opencv(我认为是4.7.x)。