gpt4 book ai didi

c++ - ASIO (C++ 11) strand.post 在使用私有(private)成员函数时导致段错误

转载 作者:行者123 更新时间:2023-11-28 04:57:00 24 4
gpt4 key购买 nike

我正在学习使用 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 行遇到了段错误。我已经检查了 error 和 privateQ,它们都有有效的地址,并且在调用它们的成员函数时它们可以工作。

myConnection 是纯虚拟父类的子类,以保持另一个类之间的命名和一些访问器不变。 privateQ 由管理器类持有,该管理器类通过引用 myConnection 传递队列,后者将其作为私有(private)成员持有。

是什么导致在执行 pushToMyQ 的行的 lambda 中发生段错误?

最佳答案

您将对本地(错误)的引用传递给异步任务。那可不行。

异步任务还保存了一份this,它可能在异步任务执行时不存在(我们无法知道,因为没有显示周围的代码)

关于c++ - ASIO (C++ 11) strand.post 在使用私有(private)成员函数时导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com