我正在学习使用ASIO库,我试图在异步读取后启动自定义处理程序。
void myConnection::start()
{
conSocket.async_read_some(asio::buffer(conIOBuf),
[this](const std::error_code error, std::size_t length)
{
std::cout << "LOG: Starting Callback\n";
myQStrand.post(
[this, &error]
{
pushToMyQ(privateQ, error);
});
});
}
我已经使用gdb来调试可执行文件,但是当我运行它时,我在代码中的pushToMyQ行遇到了分段错误。我已经检查了错误和privateQ,它们都有有效的地址,当它们的成员函数被调用时它们可以工作。
myConnection是来自纯虚拟父类的子节点,用于保持命名和一些访问器在另一个类之间保持不变。 privateQ由一个管理器类保存,该类通过引用传递队列,myConnection将其作为私有成员保存。
什么可能导致分段错误发生在执行pushToMyQ的行的lambda中?
答案 0 :(得分:1)
将对本地(error
)的引用传递给异步任务。那不好。
异步任务还会保留this
的副本,这可能在异步任务执行时不存在(我们无法知道,因为周围的代码未显示)