【发布时间】:2015-05-28 05:27:46
【问题描述】:
我实现了一个类来处理所有动物园管理员的东西。在 connect() 中,我使用 m_zh = zookeeper_init( m_zkUrl.c_str(), NULL, 10000, 0, NULL, 0 ); 来获取 zookeeper 处理程序。在类析构函数中,我使用 zookeeper_close( m_zh ); 来释放这个 zookeeper 处理程序。为什么还有一些内存泄漏? valgrind 的输出如下。
...
==5003== 1 个块中的 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== by 0x5923BFC:getpwuid_r@@GLIBC_2.2.5 (getXXbyYY_r.c:256)
==5003== by 0x5946E6E: __getlogin_r_loginuid (getlogin_r.c:68)
==5003== by 0x5946BC4: getlogin (getlogin.c:35)
==5003== by 0x4044D4: log_env (zookeeper.c:733)
==5003== by 0x406026: zookeeper_init (zookeeper.c:770)
==5003== by 0x402FFC: ZKConnection::connect() (zkconnection.cpp:37)
==5003== by 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
【问题讨论】:
-
如果你使用 c_str() 方法,你的代码就是纯 C++;我会考虑删除 C 标签。
-
因为我用的是zookeeper c客户端库..
标签: c++ c memory-leaks valgrind apache-zookeeper