私はasync_write
でTCPを介してデータを送信するためにブーストを使用しています:これを削除すると、async_writeでセグメンテーション違反が発生する可能性がありますか?
std::shared_ptr<std::vector<std::string>::iterator> iter = std::make_shared<std::vector<std::string>::iterator>(this->m_vDataToWrite.begin());
boost::asio::async_write(this->socket_, boost::asio::buffer(*message),
boost::asio::transfer_all(), boost::bind(&Session::writeHandler,
this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred(),
message,
iter
));
// ...
void Session::writeHandler(const boost::system::error_code &error, std::size_t bytes_transferred, std::shared_ptr<std::string> message, std::shared_ptr<std::vector<std::string>::iterator> it)
{
if(error)
{
std::cout << "Write handler error: " << error.message() << std::endl;
this->disconnect();
delete this;
return;
}
//....
お知らせ書き込みハンドラでdelete this;
を。
データを送信中にエラーが発生した場合、セッションは接続を切断してから削除します。ただし、writeHandler
が返された後にセグメンテーション違反が発生します。 async_write
に取り込まれていますが、this
を削除している可能性がありますか?
私は知っていますが、私は "my"コードでこれ以上アクセスしていません。ですから、 'writeHandler'が返った後、' async_write'によってアクセスされる可能性があると私は考えました。 – Bobface