在第二次从套接字读取时,我收到读取错误。
void ClientWindow::on_button_send_clicked()
{
auto message = std::make_shared<std::string>(ui->plainTextEdit->toPlainText().toStdString());
auto message_size = std::make_shared<short>(static_cast<short>(message->size()));
if(*message_size==0)
return;
_socket.async_write_some(boost::asio::buffer(message_size.get(),sizeof(*message_size)),
[this,message](const boost::system::error_code& error, std::size_t)
{
if(!error){
emit clearPlainTextEdit();
qDebug()<<message->size();
qDebug()<<*message;
_socket.async_write_some(boost::asio::buffer(message->data(),message->size()),
[this](const boost::system::error_code& error, std::size_t)
{
if(error)
emit settingStatusBarMessage(error.message() + ": sending size of message error\n");
});
}else
emit settingStatusBarMessage(error.message() + ": sending message error\n");
});
}
在排队
_socket.async_write_some(boost::asio::buffer(message->data(),message->size()),
我正在传输到另一个文件xmemory
,我在这里收到错误:
for (auto _Pnext = _STD exchange(_Myproxy->_Myfirstiter, nullptr); _Pnext; _Pnext = _Pnext->_Mynextiter) {
_Pnext->_Myproxy = nullptr;
}
错误文字:
Exception at 0x7ffbd991efb, code: 0xxc0000005: read access violation at: 0xffffffffffffffff, flagx=0x0 (first chance).
据我了解,错误不在服务器端。 我按值将智能指针存储在 lambda 函数中,并在执行此操作之前检查其内容和大小,但仍然收到错误。我也尝试过使用对象属性而不是智能指针,但错误是一样的。
消除所有噪音,很容易看到错误。
auto message = std::make_shared<std::string>(...);
auto message_size = std::make_shared<short>(...);
_socket.async_write_some(boost::asio::buffer(message_size.get(),sizeof(*message_size)),
[this,message](...)
{
...
});
您正在异步写入
message_size
并仅捕获 message
,您需要捕获两者。