c++ - boost ASIO async_write "Vector iterator not dereferencable"

标签 c++ boost boost-asio

我一直在开发一个异步 boost 服务器程序,到目前为止我已经可以连接它了。但是,我现在收到“vector 迭代器不可取消引用”错误。

我怀疑 vector 在发送数据包之前被破坏或取消引用,从而导致错误。

void start()
{
    Packet packet;
    packet.setOpcode(SMSG_PING);
    send(packet);
}

void send(Packet packet)
{
    cout << "DEBUG> Transferring packet with opcode " << packet.GetOpcode() << endl;
    async_write(m_socket, buffer(packet.write()), boost::bind(&Session::writeHandler, shared_from_this(), placeholders::error, placeholders::bytes_transferred));
}

void writeHandler(const boost::system::error_code& errorCode, size_t bytesTransferred)
{
    cout << "DEBUG> Transfered " << bytesTransferred << " bytes to " << m_socket.remote_endpoint().address().to_string() << endl;
}

一旦建立连接,就会调用 Start。 packet.write() 返回一个 uint8_t vector

如果我改变了会不会很重要

void send(Packet packet)

void send(Packet& packet)

与此问题无关,但性能方面。

最佳答案

这一切都取决于您的 Packet 类是如何实现的。它是如何复制的,.... Packet 类的拷贝是进行深层复制还是仅进行默认复制?如果它是默认拷贝并且您的类 Packet 不是 POD,这可能是原因,您将需要进行深拷贝。

一般来说,通过 const& 传递类参数会更好,所以也许你应该尝试一下

void send(Packet const& packet);

关于c++ - boost ASIO async_write "Vector iterator not dereferencable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747891/

相关文章:

c++ - 如何将使用 git 和 CMake 的外部库依赖项惯用地添加到 git 和 CMake 项目中?

c++ - boost 变体的 spirit 传承

c++ - BOOST_CHECK_EQUAL 与 pair<int, int> 和自定义运算符 <<

optimization - 如何避免 Boost ASIO react 堆受限于单核?

c++ - Boost.asio async_read_some编译错误

sockets - boost .Asio : Operation Cancelled on async_read

c++ - 编译器看不到我的主要功能(未定义对main的引用)

c++ - Nan::TryCatch 不会拦截 JS 代码中 Nan::Callback 抛出的异常

c++ - 根据类中的变量对类 vector 进行排序

C++ 十进制算术库