касательно будет, вероятно, дросселировать на пустом указателе, так как он, по-видимому, ожидает изменять существующий объект. ожидает пустой указатель, так как он возвращает новый объект.
Я думаю, что ваша проблема вызвана деструктором thread_group, который вызывается при выходе из вашей программы. Группа потоков хочет взять на себя ответственность за уничтожение ваших объектов потока. См. Также документацию boost :: thread_group .
Вы создаете объекты потока в стеке как локальные переменные в области действия вашей основной функции. Таким образом, они уже были уничтожены, когда программа выходит из программы, и thread_group пытается их удалить.
В качестве решения создайте объекты потока в куче с помощью new и позвольте thread_group позаботиться об их уничтожении:
boost::thread *t1 = new boost::thread(threaded_function, 10);
...
g.add_thread(t1);
...
add_thread () становится владельцем потока, в котором вы проходите. Группа потоков удаляет поток. В этом примере вы удаляете память, выделенную в стеке, что является серьезным нарушением.
Функция-член add_thread ()
void add_thread (thread * thrd);
Предварительное условие :
Выражение delete thrd равно правильно сформирован и не приведет к неопределенное поведение.
Эффекты:
Станьте владельцем boost :: thread объект, на который указывает thrd, и добавьте его в группу.
Постусловие :
this-> size () увеличивается на 1.
Не уверен, что это не так в вашем коде, или это просто пример ошибки. В противном случае код выглядит нормально.