1
下面的代碼在std :: thread類的.join()中拋出了段錯誤。但是,這只是我使用cv :: fastMalloc來分配數據數組。如果我使用'new'關鍵字或std :: malloc函數,則不會發生錯誤。OpenCV分配導致std :: thread中的段錯誤:: join
我需要明白爲什麼會發生這個錯誤,因爲實際上我需要一個使用此函數的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;
}
的GDB調用棧遵循以下
#0 00429B26 _pthread_cleanup_dest() (??:??)
#1 003E32A0 ??() (??:??)
有誰知道什麼可能發生?我真的覺得這太瘋狂了:S。
謝謝。
你使用的是哪個版本?你如何編譯/鏈接?如果這一切都很好,看起來像一個明確的切割錯誤。 – Voo
'mingw32-g ++。exe -std = C++ 11 -Wall -fexceptions -lm main.cpp -o main.o' 'mingw32-g ++。exe -o main.o -lopencv_core2410.dll.a' MinGW 4.8.1和OpenCV 2.4.10 –
不知道mingw,但通常當你使用std :: thread時,你也需要鏈接'-lpthread'。 – Voo