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);