我的代码中有内存泄漏问题。
当我调用 socket.handshake() 函数,
然后退出主线程时,我得到了内存泄漏。
但是,删除“socket.handshake”,然后
运行并退出主线程,内存泄漏问题就消失了。
1.示例代码:内存泄漏
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
#include <boost/thread.hpp>
using namespace boost;
void ThSslEchoClient()
{
try
{
asio::io_service ios;
asio::ssl::context context(boost::asio::ssl::context::sslv23);
context.set_options(
asio::ssl::context::default_workarounds
| asio::ssl::context::no_sslv2
| asio::ssl::context::single_dh_use);
asio::ssl::stream<boost::asio::ip::tcp::socket> socket(ios, context);
boost::system::error_code ec;
boost::asio::ip::tcp::endpoint host(boost::asio::ip::address::from_string("127.0.0.1"), 13);
socket.lowest_layer().connect(host, ec);
// REMOVE THE FOLLOWING LINE FOR COMPARISON
socket.handshake(asio::ssl::stream_base::client, ec);
if (ec)
throw boost::system::system_error(ec);
}
catch (std::exception& _e)
{
std::cerr << _e.what() << std::endl;
}
}
void TestBoostAsioSslEchoClient()
{
boost::thread_group tg;
tg.create_thread(ThSslEchoClient);
tg.join_all();
}
2. 示例代码:没有内存泄漏。
(只需删除“socket.handshake”)
// REMOVE THE FOLLOWING LINE FOR COMPARISON
//socket.handshake(asio::ssl::stream_base::client, ec);
我不知道哪里错了。请帮我。