我一直在开发一个异步 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/