小编Tsy*_*Tsy的帖子

C++ Boost ASIO async_send_to内存泄漏

我目前正在研究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)

c++ memory memory-leaks boost-asio

3
推荐指数
1
解决办法
2550
查看次数

标签 统计

boost-asio ×1

c++ ×1

memory ×1

memory-leaks ×1