leaks leak full check c++ c ubuntu valgrind getaddrinfo

c++ - leak - fuga de memoria getaddrinfo



valgrind options (3)

Dice "todavía accesible". Eso probablemente significa que la biblioteca asignó algo de memoria para un caché o algo así y no quiere liberarla. Puede ignorarlo con seguridad o al menos necesita más análisis que solo decir que es una pérdida de memoria.

¿Por qué hay una diferencia entre diferentes hosts? Probablemente porque diferentes servidores de nombres requieren diferentes tipos de trabajo.

Tengo este código para obtener información sobre la dirección IPv4:

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); }

pero si probé que argv [hostPara] es "www.google.com", recibo esto de 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)

y si argv[hostPara] es "www.ubuntu.com" no hay pérdidas de memoria. ¿Cuál es este comportamiento mágico?


Es posible que esto no sea una pérdida de memoria (técnicamente lo es, pero no debería preocuparse por ello) a veces las bibliotecas asignan memoria la primera vez que se llama a una función para llamadas posteriores. Puedes hacer que valgrind elimine esos errores si quieres.

De las FAQ :

"aún accesible" significa que su programa probablemente esté bien, no liberó algo de memoria que podría tener. Esto es bastante común ya menudo razonable. No use --show-reachable = yes si no desea ver estos informes.


Mirando un poco el gblic , se trata de la captura de objetos en caso de ipv6 (mira la línea 249).

Como han explicado otros miembros, "aún accesible" no es un error en sí mismo, pero puede ocultar algunas situaciones con errores. En este caso, no es un problema, solo una advertencia sobre algo que podría ocultar algo desagradable.

Esta advertencia también ha sido reportada para redhat

La razón de la advertencia para google y no para ubuntu es porque google ha implementado ipv6 en sus servidores y ubuntu no, y luego no se realiza la captura. Puedes comprobarlo con:

nslookup -q=AAAA www.google.com and nslookup -q=AAAA www.ubuntu.com