2016-01-10 59 views
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。

謝謝。

+0

你使用的是哪個版本?你如何編譯/鏈接?如果這一切都很好,看起來像一個明確的切割錯誤。 – Voo

+0

'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 –

+0

不知道mingw,但通常當你使用std :: thread時,你也需要鏈接'-lpthread'。 – Voo

回答

0

我解決了這個問題,重新安裝opencv。顯然問題是編譯opencv的編譯器的不同版本,我在這個例子中使用了。

爲了記錄,前段時間我用一個不支持std :: thread(我認爲4.7.x)的MinGW版本編譯了opencv。

相關問題