我目前正在研究UDP套接字客户端.我目前注意到内存泄漏,我已经尝试了几个希望压制它的东西,但它仍然占上风.在我的主力,我有一个char*已经malloc'd.然后我调用下面的函数来发送数据:
void Send(const char* data, const int size) {
Socket.async_send_to(boost::asio::buffer(data, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error));
}
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,它将始终泄漏内存.但是,如果我注释掉async_send_to呼叫,则内存保持一致.我已经尝试了几种变体(见下文),但它们似乎只是为了加速内存泄漏.
有几个注意事项,在调用完成之前,有可能char*传递给Send free.但是,在我的变化中,我已采取预防措施来处理这个问题.
变化1:
void Send(const char* data, const int size) {
char* buf = (char*)malloc(size);
memcpy(buf, data, size);
Socket.async_send_to(boost::asio::buffer(buf, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error, buf));
}
void HandleSendTo(const boost::system::error_code& ec, const char* buf) {
free(buf);
}
Run Code Online (Sandbox Code Playgroud)
变化2:
class MulticastSender {
char* Buffer;
public:
void Send(const char* data, const int size) {
Buffer = (char*)malloc(size); …Run Code Online (Sandbox Code Playgroud)