Mam ten kod do uzyskiwania informacji o adresie IPv4:getaddrinfo pamięci wyciek
struct addrinfo hints, *info = NULL;
char addr4[INET_ADDRSTRLEN];
memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET;
if (!getaddrinfo(argv[hostPara], NULL, &hints, &info)) {
inet_ntop(AF_INET, &((const sockaddr_in *)info->ai_addr)->sin_addr, addr4, INET_ADDRSTRLEN);
}
if (info != NULL) {
freeaddrinfo(info);
}
ale jeśli testowane argv [hostPara] jest "www.google.com" jestem coraz to z valgrind:
==3632== 168 bytes in 1 blocks are still reachable in loss record 1 of 1
==3632== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3632== by 0x524B5B8: make_request (check_pf.c:249)
==3632== by 0x524BA53: __check_pf (check_pf.c:342)
==3632== by 0x5201134: getaddrinfo (getaddrinfo.c:2458)
==3632== by 0x40186B: main (trace.cc:214)
i jeśli argv[hostPara]
jest "www.ubuntu.com"
, nie ma wycieków pamięci. Co to za magiczne zachowanie?
Może być, ponieważ google.com przełączył się na ipv6, a na ubuntu.com go nie ma? To znaczy. z google dostajesz bufor przekroczony w addr4 –
Czy to się sumuje, jeśli powtórzysz wywołanie 'getaddrinfo()'/'freeaddrinfo()'? – alk
A jest sposób, aby sprawdzić, jakie wersje zastosowań serwera IP dns? (bez wycieków pamięci) –