Visual c++ ZeroMQ服务器中内存泄漏[请求-应答场景]

Visual c++ ZeroMQ服务器中内存泄漏[请求-应答场景],visual-c++,memory-leaks,zeromq,Visual C++,Memory Leaks,Zeromq,我正在测试将在我的项目中使用的ØMQ。我从下载了最新的二进制文件。我正在使用libzmq-v90-mt-gd-4_0_4。lib作为项目使用的C++工具集v90。现在,我创建了一个示例服务器(如中所示)和一个客户机代码(如中所示)。服务器代码为: void zmqServer() { // Prepare our context and socket zmq::context_t context(1); zmq::socket_t socket(context, ZMQ

我正在测试将在我的项目中使用的
ØMQ
。我从下载了最新的二进制文件。我正在使用
libzmq-v90-mt-gd-4_0_4。lib
作为项目使用的
C++工具集v90
。现在,我创建了一个示例服务器(如中所示)和一个客户机代码(如中所示)。服务器代码为:

void zmqServer()
{
    //  Prepare our context and socket
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REP);
    socket.bind("tcp://*:5555");
    //int i = 0;
    while (true) {
        zmq::message_t request;

        char buffer[256];
        //  Wait for next request from client
        int size = zmq_recv(socket, buffer, 255, 0);
        if (size == -1) continue;
        if (size > 255) size = 255;
        buffer[size] = 0;
        std::string receivedStr = strdup(buffer);

        std::cout << "Message # " << i << ": " << receivedStr << std::endl;

        //  Do some 'work'
        sleep(1);

        //  Send reply back to client
        zmq::message_t reply(5);
        std::string msg = "Server#" + receivedStr;
        std::cout << "Reply # " << i << ": " << msg << std::endl;
        memcpy(reply.data(), msg.c_str(), msg.length());
        socket.send(reply);
        //i++;
    }
}
可以看到每个连接都有内存泄漏。有没有建议谁是这种情况的罪魁祸首?是
memcpy()
可疑的一个,还是像我在讨论中发现的那样。任何克服这种情况的建议都将不胜感激

编辑:


memcpy()
也在客户端使用,但是视觉泄漏检测器没有报告内存泄漏。

找到了罪魁祸首。这一行:

std::string receivedStr = strdup(buffer);
strdup()
分配内存并返回其
引用
,作为问题状态的答案&另一个来自。我应该这样做:

char* receivedStr = strdup(buffer);
// use receivedStr
free(receivedStr);
我今天第一次使用了
strdup()
。一个新手的小错误

std::string receivedStr = strdup(buffer);
char* receivedStr = strdup(buffer);
// use receivedStr
free(receivedStr);