std::string buf = "a";
std::function<void(const boost::system::error_code, const size_t)> handle_function =
[&](auto error, auto size) {
if (!error) {
boost::asio::async_read(input, boost::asio::buffer(buf),
boost::asio::transfer_exactly(1),
handle_function);
} else {
std::cout << "ERRORR!!!!\n";
}
};
boost::asio::async_read(input, boost::asio::buffer(buf), boost::asio::transfer_exactly(1),
handle_function);
}
Возникает stack overflow где-то внутри лямбды.
Есть подозрение, что buf уже деаллоцирован на момент, когда данные становятся доступными для чтения.
input — (приватный) мембер класса, тип boost::asio::posix::stream_descriptor
buf по ссылке
Не понял
Так buf - локальная переменная, она тут же уничтожается.
Понимаю, как решать проблему?
Ты должен видимо сделать этот buf мембером какого-то объекта со временем жизни больше или равным времени жизни этой лямбды
Надо чтоб buf жил дольше асинхронной операции. Можно в shared_ptr завернуть
Поинтеры, а вообще разбирайся с временем жизни
Да только хуже будет
Не будет, это стандартный костыль
Обсуждают сегодня