下面的代码在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。
感谢。
答案 0 :(得分:0)
我解决了这个问题重新安装opencv。显然问题是我编译opencv的不同版本的编译器,我在这个例子中使用了。
为了记录,我前段时间用不支持std :: thread的MinGW版本编译了opencv(我认为是4.7.x)。