Вы создаете локальную переменную io_service
, которую вы передаете рабочей функции вашего нового потока. Когда переменная выходит из области видимости (конструктор завершает работу), io_service
уничтожается и больше не может быть доступен.
Однако рабочая функция вашего потока не знает этого и, вероятно, пытается снова получить доступ к остаткам этого объекта. Уродство наступает.
Ошибка не связана с потоками, но является экземпляром распространенного типа ошибки, называемой ", возвращающей адрес локального " (даже если вы на самом деле не возвращаете ее здесь, механизм то же самое).
Решением было бы продлить срок жизни объекта io_service
, либо с помощью ручного управления (new
/ delete
), либо путем его увеличения (например, сделав его членом класса на server
вместо локальный внутри конструктора).
Похоже, у вас также есть проблема с переменной server
, которая также является локальной и будет уничтожена, как только будет создан конструктор. Поскольку вы вообще не используете его, это не проблема с кодом, который вы разместили, но в любом случае это признак того, что вы делаете что-то подозрительное.