为什么m_zh=zookeeper_init(m_zkUrl.c_str(),NULL,10000,0,NULL,0)会
Why does m_zh = zookeeper_init( m_zkUrl.c_str(), NULL, 10000, 0, NULL, 0 ) cause a memory leak?
我实现了一个类来处理所有zookeeper的东西。在connect()中,我使用了m_zh=zookeeper_init(m_zkUrl.c_str(),NULL,10000,0,NULL,0)找一个动物园管理员。在类析构函数中,我使用了zookeeper_close(m_zh)释放这个动物园管理员。为什么还有内存泄漏?valgrind的输出如下。
===5003===300(60个直接字节,240个间接字节)在13个的丢失记录11中肯定丢失
===5003===在0x4C2CFA7:malloc(vg_replace_malloc.c:296)
===5003===通过0x596A594:nss_parse_service_list(nsswitch.c:678)
===5003===通过0x596B055:__nss_database_lookup(nsswitch.c:175)
===5003===通过0x6028623:???
===5003===通过0x5923BFC:getpwuid_r@@GLIBC_2.2.5(getXXbyYY_r.c:256)
===5003===通过0x5946E6E:__getlogin_r_loginuid(getlogin_r.c:68)
===5003===通过0x5946BC4:getlogin(getlogin.c:35)
===5003===通过0x4044D4:log_env(动物园管理员.c:733)
===5003===通过0x406026:zookeeper_init(zookeeper.c:770)
===5003===通过0x402FFC:ZKConnection::connect()(ZKConnection.cpp:37)
===5003===通过0x402962:main(test_zk.cpp:44)
==4624== LEAK SUMMARY:
==4624== definitely lost: 60 bytes in 1 blocks
==4624== indirectly lost: 240 bytes in 10 blocks
==4624== possibly lost: 0 bytes in 0 blocks
==4624== still reachable: 5,120 bytes in 2 blocks
==4624== suppressed: 0 bytes in 0 blocks
您确定这是内存泄漏吗?
Valgrind说是still reachable
,这通常不是问题。
内存是在getTSData
中分配的,其名称表明它使用线程本地存储,其实现表明它每个线程只分配一次缓冲区,并正确注册函数freeBuffer以在线程结束时释放分配的内存。
您的代码确实存在内存泄漏(definitely lost: 60 bytes in 1 blocks
),但我看不到任何迹象表明它在zookeeper_init
中。
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- Python str to C++ to Python str
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 检查字符串是否"null" C++
- 解释一下 for (char c : str) 的作用?
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- if(str == NULL || str.length() == 0)获取错误