2015-11-29 56 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或类似的内存检查程序中运行您的代码应该有助于诊断问题。