C++ OpenCV分配导致std::thread::join中出现segfault
下面的代码在std::thread类的.join()中抛出一个分段错误。但是,只有在我使用cv::fastMalloc分配数据数组时,才会发生这种情况。如果使用'new'关键字或std::malloc函数,则不会发生错误 我需要理解为什么会发生此错误,因为事实上我需要一个使用此函数的cv::MatC++ 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
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 ?? () (??:??)