Co robię nie tak, że w poniższym kodzie są wycieki pamięci, które po prostu próbują odczytać katalog domowy użytkownika?Linux/C++: pobranie katalogu użytkownika bez wycieków
static std::string getHomeDir()
{
struct passwd *pw = getpwuid(getuid());
std::string res(pw->pw_dir);
endpwent();
return res;
}
valgrind narzeka:
==32757== 160 (40 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 42 of 48
==32757== at 0x402BB7A: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==32757== by 0x456E84E: nss_parse_service_list (nsswitch.c:678)
==32757== by 0x456EFC9: __nss_database_lookup (nsswitch.c:175)
==32757== by 0x4A8E168: ???
==32757== by 0x4A8FB5C: ???
==32757== by 0x4525FA6: [email protected]@GLIBC_2.1.2 (getXXbyYY_r.c:256)
==32757== by 0x45258ED: getpwuid (getXXbyYY.c:117)
==32757== by 0x805AD56: getHomeDir() (ConfigReader.cpp:73)
(również jako sidenote: man getpwuid
pokazują przykładowy program, który również przecieki taką samą ilość pamięci ...)
(i dla tych, którzy chcą porównać z ich linuxami:
uname -a
daje Linux reference 3.5.0-47-generiC#71-Ubuntu SMP Tue Feb 18 23:59:30 UTC 2014 i686 athlon i686 GNU/Linux
... w zasadzie Ubuntu 12.10
jakie nagłówki zawierasz? Próbowałem: 'unistd.h' i' pwd.h' i nie dostałem żadnych przecieków ... – Massa