场景
使用evpp的evnsq的代码连接nsqlookupd进行Http查询,然后连接nsq,存在内存泄漏。
类似于这样的代码:
#include <evnsq/exp.h>
#include <evnsq/consumer.h>
#include <evpp/event_loop.h>
int OnMessage(const evnsq::Message* msg) {
LOG_INFO << "Received a message, id=" << msg->id << " message=[" << msg->body.ToString() << "]";
return 0;
}
int main(int argc, char* argv[]) {
std::string nsqd_tcp_addr;
std::string lookupd_http_url;
nsqd_tcp_addr = "127.0.0.1:4150";
lookupd_http_url = "http://127.0.0.1:4161/lookup?topic=test";
if (argc == 2) {
if (strncmp(argv[1], "http", 4) == 0) {
lookupd_http_url = argv[1];
} else {
nsqd_tcp_addr = argv[1];
}
}
evpp::EventLoop loop;
evnsq::Consumer client(&loop, "test", "ch1", evnsq::Option());
client.SetMessageCallback(&OnMessage);
if (!lookupd_http_url.empty()) {
client.ConnectToLoopupds(l

本文分析了一个使用EvPP和EvNSQ库的C++程序中存在的内存泄漏问题。该程序通过HTTP查询nsqlookupd并连接到nsq,但因未能正确释放请求对象导致内存泄漏。文章详细解释了内存泄漏的原因,并提供了一个简单的示例来说明问题。
最低0.47元/天 解锁文章





