getpwnam_r内存泄漏

我使用getpwnam_r来处理程序中的客户端连接。 可悲的是,它似乎分配了一个永远不会释放的缓冲区。 相关的valgrind输出:

==15774== 536 (104 direct, 432 indirect) bytes in 2 blocks are definitely lost in loss record 1 of 3 ==15774== at 0x4C24CFE: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so) ==15774== by 0x5143B5A: nss_parse_service_list (in /lib64/libc-2.10.1.so) ==15774== by 0x51442E6: __nss_database_lookup (in /lib64/libc-2.10.1.so) ==15774== by 0x57BE35F: ??? ==15774== by 0x57BF3F6: ??? ==15774== by 0x51014D2: getpwnam_r@@GLIBC_2.2.5 (in /lib64/libc-2.10.1.so) ==15774== by 0x407906: dopass (auth.c:71) ==15774== by 0x40393E: do_cmd (command.c:127) ==15774== by 0x402496: ftp_main (server.c:58) ==15774== by 0x40224C: handle_client (daemon.c:211) ==15774== by 0x402073: daemon_main (daemon.c:123) ==15774== by 0x4043CC: main (main.c:48) ==15774== ==15774== LEAK SUMMARY: ==15774== definitely lost: 104 bytes in 2 blocks. ==15774== indirectly lost: 432 bytes in 18 blocks. ==15774== possibly lost: 0 bytes in 0 blocks. ==15774== still reachable: 0 bytes in 0 blocks. ==15774== suppressed: 0 bytes in 0 blocks. 

我有办法告诉getpwnam_r释放它的缓冲区吗? 或者我是否必须压制这些Valgrind错误?

谢谢,卡斯帕

内存并没有特别为getpwnam分配。 相反,它代表/etc/nsswitch.conf的配置。 AFAICT,让libc释放这个内存的唯一方法是调用__libc_freeres

 extern void __libc_freeres (void); 

这应该释放C库保存的所有内存(而不仅仅是NSS保留的内存)。