2015-11-29 75 views
0

我有以下代碼:C++多線程11內存錯誤

somefunc(string s, semaphore* sem) { 
    //some functionality 
    sem->signal(); 
} 

int main() { 
    int num = 0; 
    semaphore sem(0); 
    vector<string> arr; 
    for (string& s : arr) { 
     ++num; 
     thread(somefunc, s, &sem).detach(); 
    } 

    for (int i = 0; i < num; i++) 
     sem.wait(); 
} 

我正在裏面std::string分配SIGSEGV錯誤在哪裏thread()是線。這段代碼有什麼問題嗎? semaphore是一個使用互斥鎖和條件變量的自定義類。

+1

什麼樣的內存錯誤? – user2079303

+0

對不起,我剛添加了詳細信息 – hovo

+3

寫了一個[mcve]。 – user2079303

回答

0

很難說沒有看到您的真實代碼,但我的猜測是,當字符串引用s被複制到thread中時,它不再有效,因爲主線程已經退出了包含arr的範圍。

在valgrind或類似的內存檢查程序中運行您的代碼應該有助於診斷問題。