2015-11-29 2 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(); 
} 

я получаю SIGSEGV ошибки внутри std::string размещения на линии, где thread() есть. Что-то не так с этим кодом? semaphore - это пользовательский класс, который использует мьютекс и условную переменную.

+1

Какие ошибки памяти? – user2079303

+0

Извините, я просто добавил деталь – hovo

+3

Напишите [mcve]. – user2079303

ответ

0

Трудно сказать, не видя реальный код, но я думаю, что когда ссылка строки s копируются в thread он больше не действует, так как основной поток уже вышел из рамки, содержащей arr.

Выполнение кода под valgrind или аналогичной проверки памяти должно помочь диагностировать проблему.

Смежные вопросы